借助键路径从嵌套字典中获取值,这里是dict
:
json = {
"app": {
"Garden": {
"Flowers": {
"Red flower": "Rose",
"White Flower": "Jasmine",
"Yellow Flower": "Marigold"
}
},
"Fruits": {
"Yellow fruit": "Mango",
"Green fruit": "Guava",
"White Flower": "groovy"
},
"Trees": {
"label": {
"Yellow fruit": "Pumpkin",
"White Flower": "Bogan"
}
}
}
该方法的输入参数是用点分隔的关键路径,从关键路径=“app.Garden.Flowers.white Flower”需要打印'Jasmine'。到目前为止我的代码:
import json
with open('data.json') as data_file:
j = json.load(data_file)
def find(element, JSON):
paths = element.split(".")
# print JSON[paths[0]][paths[1]][paths[2]][paths[3]]
for i in range(0,len(paths)):
data = JSON[paths[i]]
# data = data[paths[i+1]]
print data
find('app.Garden.Flowers.White Flower',j)
最佳答案
这是一个 fold 的实例.您可以像这样简洁地编写它:
from functools import reduce
import operator
def find(element, json):
return reduce(operator.getitem, element.split('.'), json)
或者更像 Python 的方式(因为 reduce()
由于可读性差而不被接受)像这样:
def find(element, json):
keys = element.split('.')
rv = json
for key in keys:
rv = rv[key]
return rv
j = {"app": {
"Garden": {
"Flowers": {
"Red flower": "Rose",
"White Flower": "Jasmine",
"Yellow Flower": "Marigold"
}
},
"Fruits": {
"Yellow fruit": "Mango",
"Green fruit": "Guava",
"White Flower": "groovy"
},
"Trees": {
"label": {
"Yellow fruit": "Pumpkin",
"White Flower": "Bogan"
}
}
}}
print find('app.Garden.Flowers.White Flower', j)
关于python - 来自键路径的嵌套字典值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31033549/