有没有办法为嵌套的 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] 这个问题和公认的答案是古老的。较新的答案可能比原始答案做得更好。但是我没有测试它们,所以我不会更改接受的答案。
最佳答案
我能确定的最好的库之一,此外,它的开发非常活跃,是从 boto 提取的项目:JMESPath .它有一个非常强大的语法来处理通常需要几页代码来表达的事情。
这里有一些例子:
search('foo | bar', {"foo": {"bar": "baz"}}) -> "baz"
search('foo[*].bar | [0]', {
"foo": [{"bar": ["first1", "second1"]},
{"bar": ["first2", "second2"]}]}) -> ["first1", "second1"]
search('foo | [0]', {"foo": [0, 1, 2]}) -> [0]
关于python - 类似 Xpath 的嵌套 python 字典查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7320319/