¿Hay alguna manera de definir una consulta de tipo XPath para diccionarios de python anidados?Xpath como consulta para diccionarios de python anidados
Algo como esto:
foo = {
'spam':'eggs',
'morefoo': {
'bar':'soap',
'morebar': {'bacon' : 'foobar'}
}
}
print(foo.select("/morefoo/morebar"))
>> {'bacon' : 'foobar'}
También necesitaba para seleccionar las listas anidadas;)
Esto se puede hacer fácilmente con una solución 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")
[EDICIÓN 2016] Este pregunta y la respuesta aceptada son antiguas. Las respuestas más nuevas pueden hacer el trabajo mejor que la respuesta original. Sin embargo, no los probé, así que no cambiaré la respuesta aceptada.
¿Por qué no usar 'foo ['morefoo'] ['morebar']'? – MarcoS
porque quiero hacer: def bla (consulta): data.select (consulta) – RickyA
@MarcoS Sería más interesante con las listas donde el microlenguaje de ruta devolvería varios elementos. –