首页 > 解决方案 > Python:检查嵌套字典中的特定键,如果匹配则返回所有先前的键

问题描述

我有一个嵌套字典,我想迭代整个字典来检查特定的键。如果它匹配,我想返回我迭代的所有键以达到该特定键。

My Dictionary:

d = {
    "aaa":{
        "bbb":"xyz",
        "ccc":{
            "description":"xyz",
            "data":"abc"
        }
        "description":"xyz"
    }
    "xxx":{
        "description":"xyz",
        "bbb":{
            "ccc":{
                "ddd":{
                    "description":"xyz"
                }
            }
        }
    }
}

Excpected output:

aaa--description
aaa--ccc--description
xxx--description
xxx--bbb--ccc--ddd--description

我尝试了下面的代码,但没有得到预期的输出

tmp_str = ""
def iter_dict(d):
    global tmp_str
    for key in sorted(d.keys()):
        if type(d[key]) == dict and len(d[key]) > 0:
            tmp_str += "--%s" %key
            iter_dict(d[key])
        elif key == "description":
            tmp_str += "--%s\n" %(key)

for key in d.keys():
    tmp_str += "\n\n%s" %key
    iter_dict(d[key])
print tmp_str

请分享您的想法..谢谢

标签: pythonpython-2.7

解决方案


您需要跟踪递归时看到的键。只需向您的iter_dict函数添加一个参数并在那里按下/弹出键。

另外:不要使用这个 global tmp_str,只返回值。

def iter_dict(d, rec_keys=None):
    rec_keys = rec_keys or []
    results = []
    for key, value in sorted(d.items(), key=lambda x: x[0]):
        if isinstance(value, dict) and value:
            results.append(iter_dict(value, rec_keys + [key]))
        elif key == "description":
            results.append('--'.join(rec_keys + ['description']))
    return '\n'.join(results)

tmp_str = iter_dict(d)

这导致:

>>> print(tmp_str)
aaa--ccc--description
aaa--description
xxx--bbb--ccc--ddd--description
xxx--description

我将把行的顺序留给你作为练习。


推荐阅读