python - 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
请分享您的想法..谢谢
解决方案
您需要跟踪递归时看到的键。只需向您的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
我将把行的顺序留给你作为练习。
推荐阅读
- c++ - 您可以使用 std::bind (或其他)来更改返回类型吗?
- javascript - 如何停止弹出登录窗口?
- spring - Whitelabel 错误 Spring Boot - 项目结构
- javascript - 计算最大矩形大小,任意旋转,以适应边界框
- angular - 获取以角度代码返回 HttpErrorrResponse 的 API,错误代码 302 和错误包装的响应 json
- c++ - gdb 在 .so 文件中设置中断,没有命名的源文件
- firebase-realtime-database - Flutter 下拉菜单详细信息未保存到 Firestore
- spring-boot - 数据库用户未登录的 Spring Boot 安全性
- ios - AVAssetWriter - 设置自定义帧率
- javascript - 试图访问 var 中的最后一个元素