Есть ли способ определить запрос типа XPath для вложенных словарей Python.
Что-то вроде этого:
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] Этот вопрос и принятый ответ являются древними. Новые ответы могут выполнять работу лучше, чем исходный ответ. Однако я не проверял их, поэтому не буду менять принятый ответ.
foo['morefoo']['morebar']
? - person MarcoS   schedule 06.09.2011