如何遍历多层嵌套字典,提取同时含aaa与zzz键的键值对列表?
解决方案
思路
递归遍历字典的每一层,核心步骤如下:
- 检查当前层级的字典是否同时包含
aaa和zzz两个键; - 若存在,将这两个键值对格式化为指定字符串,组成元组加入结果列表;
- 递归处理当前字典中所有值为字典的子节点,重复上述检查逻辑。
实现代码
d = { "aaa":{ "bbb":"xyz", "ccc":{ "description":"xyz", "data":"abc" }, "description":"xyz" }, "xxx":{ "description":"xyz", "bbb":{ "ccc":{ "ddd":{ "description":"xyz" }, "aaa":{ "description":{ "hhh": "xyz" } }, "zzz":{ "description":"xyz" } } } }, "lll":{ "description":"xyz", "bbb":{ "ccc":{ "hhh":{ "description":"xyz" }, "ooo":{ "description":"xyz", "aaa":{ "ddd":{ "description":"xyz" } }, "zzz":{ "ddd":{ "description":"xyz" } } }, "zzz":{ "description":"xyz" } } } } } result = [] def check_nested_dict(current_dict): # 检查当前层级是否同时存在目标键 if 'aaa' in current_dict and 'zzz' in current_dict: # 格式化为要求的字符串格式 aaa_entry = f"aaa: {repr(current_dict['aaa'])}" zzz_entry = f"zzz: {repr(current_dict['zzz'])}" result.append((aaa_entry, zzz_entry)) # 递归遍历所有子字典节点 for value in current_dict.values(): if isinstance(value, dict): check_nested_dict(value) # 执行遍历逻辑 check_nested_dict(d) # 打印最终结果 print(result)
输出结果
运行代码后,将得到符合要求的结果:
[ ("aaa: {'description': {'hhh': 'xyz'}}", "zzz: {'description': 'xyz'}"), ("aaa: {'ddd': {'description': 'xyz'}}", "zzz: {'ddd': {'description': 'xyz'}}") ]
关键说明
- 使用
isinstance(value, dict)判断值类型,比type(value) is dict更灵活,支持字典子类; repr()函数确保字典值的字符串表示与原结构一致;- 递归逻辑会遍历每一层字典,不会遗漏任何可能包含目标键的层级。
内容的提问来源于stack exchange,提问作者Se Ko
相关产品推荐
相关产品推荐

