python - 来自键路径的嵌套字典值

标签 python dictionary

借助键路径从嵌套字典中获取值,这里是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/

相关文章:

python - 如何在 gtk3-python 中执行后台任务?

python - group_by 语句、sqlalchemy 和 postgresql 的问题

python - 以特定顺序调用函数列表?

python - 带有 reStructuredText 的项目符号列表中的源代码

python - 通过在 python 中取平均值来生成 dict

python - 基于字典替换列表列表中的字符串的有效方法

java - 将结果集值放入 Collection 对象,然后添加到 ArrayList

python - Python中的字典字典?

python从字符串中获取日期

vb.net - 在声明时将键/值添加到字典中