Existe-t-il un moyen de définir une requête de type XPath pour les dictionnaires python imbriqués.
Quelque chose comme ça:
foo = {
'spam':'eggs',
'morefoo': {
'bar':'soap',
'morebar': {'bacon' : 'foobar'}
}
}
print( foo.select("/morefoo/morebar") )
>> {'bacon' : 'foobar'}
J'avais aussi besoin de sélectionner des listes imbriquées ;)
Cela peut être fait facilement avec la solution de @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] Cette question et la réponse acceptée sont anciennes. Les réponses les plus récentes peuvent mieux faire le travail que la réponse originale. Cependant, je ne les ai pas testés, je ne modifierai donc pas la réponse acceptée.