C'è un modo per definire una query di tipo XPath per i dizionari python nidificati.Xpath come query per dizionari python nidificati
Qualcosa di simile a questo:
foo = {
'spam':'eggs',
'morefoo': {
'bar':'soap',
'morebar': {'bacon' : 'foobar'}
}
}
print(foo.select("/morefoo/morebar"))
>> {'bacon' : 'foobar'}
Ho anche bisogno di selezionare liste annidate;)
Questo può essere fatto facilmente con la soluzione @ di 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] Questo domanda e la risposta accettata sono antiche. Le risposte più recenti possono fare il lavoro meglio della risposta originale. Tuttavia non li ho testati, quindi non cambierò la risposta accettata.
Perché non usare 'foo ['morefoo'] ['morebar']'? – MarcoS
perché voglio fare: def bla (query): data.select (query) – RickyA
@MarcoS Sarebbe più interessante con le liste in cui il percorso microlingua restituirebbe più elementi. –