【问题标题】:Extracting the keys associated in previous levels nested dictionary提取在先前级别嵌套字典中关联的键
【发布时间】:2019-04-25 15:26:41
【问题描述】:

我有一个深度未知的大型嵌套字典,我想知道如何找到导致该值的键。比如……

{'furniture':{'chair':{'sofa':{'cushion':{}}}}}

理想情况下,我正在寻找一个函数来确定我输入的值的路径。我曾尝试在线研究,这就是我尝试过的......

def route(d,key):
    if key in d: return d[key]

    for k,v in d.items():
        if isinstance(v,dict):
            item = route(v, key)
            if item is not None:
                return item

这将返回键内的项目。我希望能够提取导致该项目的路径。例如,route(dictionary,'sofa') 那么我将能够获得预期的输出或类似的东西......

{'sofa':{'chair':'furniture'}}

我可以通过哪些方式实现这一目标?感谢您的帮助

【问题讨论】:

    标签: python python-3.x dictionary nested


    【解决方案1】:

    您可以递归地执行此操作并返回将您引导到目标键的键列表:

    def route(d, key):
        if key in d: return [key]
        for k, v in d.items():
            if type(v) == dict:
                found = route(v, key)
                if found: return [k] + found
        return []
    

    如果我们在以下字典上运行它:

    data = {
        'furniture': {
            'chair': {
                'sofa': {
                    'cushion': {}
                }
            }
        },
        'electronics': {
            'tv': {
                'samsung43': 800,
                'tcl54': 200
            }
        }
    }
    
    print(route(data, 'cushion'))
    print(route(data, 'tcl54'))
    print(route(data, 'hello'))
    

    我们得到以下输出:

    ['furniture', 'chair', 'sofa', 'cushion']
    ['electronics', 'tv', 'tcl54']
    []
    

    【讨论】:

    • 嗨,这很好,但是当我运行它来搜索具有多个关联值的东西时,我得到了最大递归深度错误。例如,{'furniture':{'chair':{'sofa':{'cushion':{},'cushion2':{},'soft cushion':{}}}}}
    • 您好,我很抱歉。它对我也很有效。我想我的数据集太大了,我无法搜索数据集底部的值:(
    • @Cua 好奇怪,有多大?
    • 175,000 KB
    • 感谢您的帮助。但不幸的是,我已经尝试过了,我的内核在 3000-3500 左右开始出现故障/关闭,但仍然不够
    猜你喜欢
    • 2022-10-16
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 2014-12-06
    • 2021-10-26
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多