我已经尝试了多种方法,但不幸的是没有得到任何有用的结果。我有以下问题:我有一个非常深且任意的嵌套字典。
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"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想搜索字典的所有级别并检查键“aaa”和“zzz”是否出现在该级别中。如果是这种情况,我想在带有元组的列表中输出键以及相应的值。
[('aaa: {'ddd':{'description':'xyz'}', 'zzz: {'description':'xyz'}'),
('aaa:{'ddd':{'description':'xyz'}}', 'zzz:{'description':'xyz'})
]
Run Code Online (Sandbox Code Playgroud)
我知道与
d.keys()
Run Code Online (Sandbox Code Playgroud)
可以在一层打印所有按键。
我知道通过这个函数我可以遍历字典中的所有键和值
def recursive_items(dictionary):
for key, value in dictionary.items():
if type(value) is dict:
yield from recursive_items(value)
else:
yield (key, value)
Run Code Online (Sandbox Code Playgroud)
但是,我在链接两者并将输出放入元组列表中时遇到问题。
尝试(d是你问题中的字典):
def find(d, keys=("aaa", "zzz")):
if isinstance(d, dict):
if all(k in d for k in keys):
yield tuple((k, d[k]) for k in keys)
for v in d.values():
yield from find(v, keys)
elif isinstance(d, list):
for v in d:
yield from find(v, keys)
print(list(find(d)))
Run Code Online (Sandbox Code Playgroud)
印刷:
[
(
("aaa", {"description": {"hhh": "xyz"}}),
("zzz", {"description": "xyz"})),
(
("aaa", {"ddd": {"description": "xyz"}}),
("zzz", {"ddd": {"description": "xyz"}}),
),
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |