首页 > 解决方案 > Python:在复杂的嵌套字典中查找并返回特定字典

问题描述

我有一个嵌套字典,这真的很复杂。我试图找到一个特定的键/值组合并返回该值(“值”是一个字典)。我尝试使用递归函数但没有返回。

如您所见,我正在学习编码,这可能是一种幼稚的方法。感谢您解释我做错了什么以及更好的方法示例。

字典的一个例子是这样的(真实的要复杂得多,但遵循类似的模式:

inDict = {
    "key1": "val",
    "key2": [],
    "key3": {"asf": {"val1": 0, "key6": {}}, "key7": False},
    "key4": {"test2": {"my_key": {"my_dict": True}, "id": "temp"}},
    "key5": 5
}

我尝试解决它看起来像这样:

def channel_dict(inDict):
    def recurse_func(d):
        if type(d) == dict and bool(d):
            print(d.keys())
            if 'my_key' in d.keys() and type(d['my_key']) == dict:
                return d['my_key']
            else:
                for v in d.values():
                    if type(v) == dict and bool(v):
                        print(v)
                        return recurse_func(v)

    return recurse_func(inDict)

channelDict = channel_dict(inDict)

处理完“key3”的值后,我的代码以 None 作为返回值退出递归函数。正如我在上面所写的,感谢所有帮助。

标签: pythondictionary

解决方案


你得到None因为你的函数在它找到的第一个嵌套字典中进行递归搜索,即key3在这种情况下。如果键不存在,则不会遍历实际字典中的剩余键。

我修改了你的功能

def channel_dict(inDict):
    def recursive_func(d, k='my_key'):
        if isinstance(d, dict):
            if k in d and isinstance(d[k], dict):
                return d[k]
            for key in d:
                item = recursive_func(d[key], k)
                if item is not None:
                    return item
        elif isinstance(d, list):
            for element in d:
                item = recursive_func(element, k)
                if item is not None:
                    return item

        return None

    return recursive_func(inDict)

channelDict = channel_dict(inDict)

k是您要获取其数据的键。以上{'my_dict': True}作为输出返回到channelDict


推荐阅读