Xpath像查询嵌套的python字典

有没有办法为嵌套的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]这个问题和公认的答案是古老的。较新的答案可能比原来的答案更好。但是我没有测试他们,所以我不会改变接受的答案。

最佳答案
不完美,但你可能会用sth喜欢

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

    return elem

这不支持xpath的东西,如索引,当然…更不用说/ key trap unutbu指示。

转载注明原文:Xpath像查询嵌套的python字典 - 代码日志