Có cách nào để xác định truy vấn kiểu XPath cho từ điển python lồng nhau không.Xpath giống như truy vấn cho từ điển python lồng nhau
Something như thế này:
foo = {
'spam':'eggs',
'morefoo': {
'bar':'soap',
'morebar': {'bacon' : 'foobar'}
}
}
print(foo.select("/morefoo/morebar"))
>> {'bacon' : 'foobar'}
Tôi cũng cần thiết để chọn danh sách lồng nhau;)
Điều này có thể được thực hiện dễ dàng bằng dung dịch @ Jellybean của:
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] Đây câu hỏi và câu trả lời được chấp nhận là cổ xưa. Các câu trả lời mới hơn có thể thực hiện công việc tốt hơn câu trả lời gốc. Tuy nhiên tôi đã không kiểm tra chúng vì vậy tôi sẽ không thay đổi câu trả lời được chấp nhận.
Tại sao không sử dụng 'foo ['morefoo'] ['morebar']'? – MarcoS
vì tôi muốn làm: def bla (truy vấn): data.select (truy vấn) – RickyA
@MarcoS Nó sẽ thú vị hơn với các danh sách nơi đường dẫn microlanguage sẽ trả về nhiều mục. –