est-il un moyen de définir une requête de type XPath pour les dictionnaires de python imbriqués.Xpath comme requête pour les dictionnaires de python imbriqués
Quelque chose comme ceci:
foo = {
'spam':'eggs',
'morefoo': {
'bar':'soap',
'morebar': {'bacon' : 'foobar'}
}
}
print(foo.select("/morefoo/morebar"))
>> {'bacon' : 'foobar'}
J'ai aussi besoin de sélectionner des listes imbriquées;)
Cela peut se faire 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 nouvelles réponses peuvent faire le travail mieux que la réponse originale. Cependant, je ne les ai pas testés, donc je ne changerai pas la réponse acceptée.
Pourquoi ne pas utiliser 'foo ['morefoo'] ['morebar']'? – MarcoS
parce que je veux faire: def bla (requête): data.select (requête) – RickyA
@MarcoS Il serait plus intéressant avec les listes où le chemin microlanguage renverrait plusieurs éléments. –