首页 > 解决方案 > 在嵌套 Python 字典中搜索键

问题描述

我想在 Python dict 中搜索键值对。我的 dict 是嵌套的,如此简单的解决方案,例如:

if 'keyname' in my_dict:
...

或者:

for key, value in my_dict.items():
    if 'keyname' == key:

对我不起作用。这是我的命令:

my_dict = {'a': 111,
           'b': 222,
           'c':{'d': 333,
                'e': 444},
           'f':555,
           'g':{'h': {'i': 666}}}

我想找到'i'或'd'的值,最简单的方法是什么?我不关心嵌套字典的键的名称。例如,我不关心'c'或'g'或'h'的键名,我只关心键值(key-number)。有没有办法将我的 dict 转换为如下所示:

my_result = {'a': 111,
             'b': 222,
             'd': 333,
             'e': 444,
             'f': 555,
             'i': 666}

这样就很容易了。

标签: pythondictionary

解决方案


您可以在此处使用递归来展平字典。

def flat(data):
    out = {}
    for k, v in data.items():
        if isinstance(v, dict):
            out.update(flat(v))
        else:
            out[k] = v
    return out

flat(my_dict)
# {'a': 111, 'b': 222, 'd': 333, 'e': 444, 'f': 555, 'i': 666}

推荐阅读