当前位置: 首页 > 面试题库 >

像Xpath一样查询嵌套的python字典

阎丰羽
2023-03-14
问题内容

有没有一种方法可以为嵌套的python字典定义XPath类型查询。

像这样:

foo = {
  'spam':'eggs',
  'morefoo': {
               'bar':'soap',
               'morebar': {'bacon' : 'foobar'}
              }
   }

print( foo.select("/morefoo/morebar") )

>> {'bacon' : 'foobar'}

我还需要选择嵌套列表;)

这可以通过@jellybean的解决方案轻松完成:

def xpath_get(mydict, path):
    elem = mydict
    try:
        for x in path.strip("/").split("/"):
            try:
                x = int(x)
                elem = elem[x]
            except ValueError:
                elem = elem.get(x)
    except:
        pass

    return elem

foo = {
  'spam':'eggs',
  'morefoo': [{
               'bar':'soap',
               'morebar': {
                           'bacon' : {
                                       'bla':'balbla'
                                     }
                           }
              },
              'bla'
              ]
   }

print xpath_get(foo, "/morefoo/0/morebar/bacon")

[EDIT 2016]这个问题和公认的答案都是古老的。更新的答案可能比原始答案做得更好。但是,我没有测试它们,所以我不会更改已接受的答案。


问题答案:

并不完全漂亮,但是您可能会使用

def xpath_get(mydict, path):
    elem = mydict
    try:
        for x in path.strip("/").split("/"):
            elem = elem.get(x)
    except:
        pass

    return elem

当然,这不支持xpath之类的东西,例如索引……更不用说/指出的关键陷阱unutbu了。



 类似资料:
  • 问题内容: 我想使用ES进行图书搜索。因此,我决定将作者姓名和标题(作为嵌套文档)放入索引,如下所示: 我不明白的是:如何构造搜索查询,以便在搜索“一二”时仅找到第二本书,而在搜索“二三”时什么也找不到,而在搜索“一”时所有图书呢? 问题答案: 也许是这样的? 该查询基本上说一个文件必须有and 。您可以轻松地重新配置该查询。例如,如果您只想搜索作者,请删除嵌套部分。如果您想要另一本书,请更改嵌套

  • 和相应的查询解析器 这里的主要想法只是有一个过滤器,可以看到什么食谱有一些成分,用户会通过应用程序通知。 我使用数据库中的所有食谱获得了“recipe”查询,但我需要一个获取这些食谱的查询,然后使用field comprient进行筛选,例如: 食谱-糖蛋糕,配料:糖、蜂蜜、四个… 配方-天鹅绒蛋糕,配料:糖、香草、... 并且用户通知Sugar,API应该返回这2个食谱,但是如果用户通知Suga

  • 我正试图用jooq编写这个查询 我尝试了几件事,但没有成功。到目前为止,我只得到 如何将num列添加到结果中?感谢您的帮助。

  • 我试图创建一个嵌套查询,它将过滤掉一些带有特定术语的文档。在本例中,我试图过滤掉在user.first中有匹配术语的文档。数据示例: 我的查询没有得到所需的结果,因为它返回给我所有未筛选的记录。我尝试使用: 我希望这里得到与过滤器不匹配的文档。在这种情况下,它应该只返回第二个文档。做这件事的正确方法是什么?

  • 我正在尝试使用promise与我的异步函数。根据我的理解,promise应该是缓解回调地狱。然而,我的代码似乎仍然嵌套得很深。 我是否遗漏了一些关于promise的东西(是否可以重写以使其更易读/更通俗),或者promise有时就像回调一样嵌套? 在本例中,我正在构建一个函数,该函数调用API从某个社交媒体帐户检索好友列表。如果初始调用由于身份验证错误而失败,我知道我必须首先进行身份验证,然后再次

  • 问题内容: 我在获取与Elasticsearch一起使用的嵌套查询时遇到问题(如果我删除了查询字符串之一,则可以使用)。我要解决的问题是我有一个包含关闭列表的文档(关闭)。我想在条件满足另一个值的闭包列表中搜索一个值。那只是从argan = 1的闭包中获得价值 我正在得到这个错误响应; 我的映射如下所示。 有人知道我在做什么错吗? 问题答案: 您的查询不是有效的查询。您需要使用适当的复合查询将其他