Python:在复杂的嵌套字典中查找并返回特定的字典

Python:在复杂的嵌套字典中查找并返回特定的字典,python,dictionary,Python,Dictionary,我有一个嵌套字典,它非常复杂。我试图找到一个特定的键/值组合并返回该值(“value”是一个字典)。我尝试使用递归函数,但没有返回任何函数 正如您可能看到的,我正在学习编码,这可能是一种幼稚的方法。对于我做错了什么的解释,以及更好的方法的例子,我们表示赞赏 字典的一个例子是这样的(真正的字典要复杂得多,但遵循类似的模式: inDict = { "key1": "val", "key2": [], "ke

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

正如您可能看到的,我正在学习编码,这可能是一种幼稚的方法。对于我做错了什么的解释,以及更好的方法的例子,我们表示赞赏

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

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。
正如我在上面所写的,我们非常感谢您提供的所有帮助。

您将获得,因为您的函数在它找到的第一个嵌套字典中进行递归搜索,即在本例中为
键3
。如果该键不在那里,它不会循环遍历实际字典中的其余键

我已经修改了你的函数

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

感谢您的回答。我没有意识到我只输入了第一个嵌套字典,您的改进起到了作用!欢迎您,请将答案标记为已接受。