python - Python:在复杂的嵌套字典中查找并返回特定字典
问题描述
我有一个嵌套字典,这真的很复杂。我试图找到一个特定的键/值组合并返回该值(“值”是一个字典)。我尝试使用递归函数但没有返回。
如您所见,我正在学习编码,这可能是一种幼稚的方法。感谢您解释我做错了什么以及更好的方法示例。
字典的一个例子是这样的(真实的要复杂得多,但遵循类似的模式:
inDict = {
"key1": "val",
"key2": [],
"key3": {"asf": {"val1": 0, "key6": {}}, "key7": False},
"key4": {"test2": {"my_key": {"my_dict": True}, "id": "temp"}},
"key5": 5
}
我尝试解决它看起来像这样:
def channel_dict(inDict):
def recurse_func(d):
if type(d) == dict and bool(d):
print(d.keys())
if 'my_key' in d.keys() and type(d['my_key']) == dict:
return d['my_key']
else:
for v in d.values():
if type(v) == dict and bool(v):
print(v)
return recurse_func(v)
return recurse_func(inDict)
channelDict = channel_dict(inDict)
处理完“key3”的值后,我的代码以 None 作为返回值退出递归函数。正如我在上面所写的,感谢所有帮助。
解决方案
你得到None因为你的函数在它找到的第一个嵌套字典中进行递归搜索,即key3
在这种情况下。如果键不存在,则不会遍历实际字典中的剩余键。
我修改了你的功能
def channel_dict(inDict):
def recursive_func(d, k='my_key'):
if isinstance(d, dict):
if k in d and isinstance(d[k], dict):
return d[k]
for key in d:
item = recursive_func(d[key], k)
if item is not None:
return item
elif isinstance(d, list):
for element in d:
item = recursive_func(element, k)
if item is not None:
return item
return None
return recursive_func(inDict)
channelDict = channel_dict(inDict)
这k
是您要获取其数据的键。以上{'my_dict': True}
作为输出返回到channelDict
推荐阅读
- rust - 如何为实现特征的所有类型实现 From 特征,但对某些类型使用特定实现?
- itil - ITSM 如何对建议进行分类?
- flutter - 如何明确允许剪辑?
- swift - Swift - 完成处理程序后不更新值
- asp.net - ASP.NET Core 和 .NET 4.7.2 的混合使 Visual Studio 忘记将内容文件复制到依赖项目
- android - 将数据发送到 json 时的进度条/对话框
- reporting-services - SSRS 报告 - 一次执行一个多值参数
- css - CSS: Limit indentation on nested
- javascript - 谷歌折线图不显示数据
- java - SpringBoot在jar文件夹外运行时无法读取application.properties