Python:在复杂的嵌套字典中查找并返回特定的字典
我有一个嵌套字典,它非常复杂。我试图找到一个特定的键/值组合并返回该值(“value”是一个字典)。我尝试使用递归函数,但没有返回任何函数 正如您可能看到的,我正在学习编码,这可能是一种幼稚的方法。对于我做错了什么的解释,以及更好的方法的例子,我们表示赞赏 字典的一个例子是这样的(真正的字典要复杂得多,但遵循类似的模式:Python:在复杂的嵌套字典中查找并返回特定的字典,python,dictionary,Python,Dictionary,我有一个嵌套字典,它非常复杂。我试图找到一个特定的键/值组合并返回该值(“value”是一个字典)。我尝试使用递归函数,但没有返回任何函数 正如您可能看到的,我正在学习编码,这可能是一种幼稚的方法。对于我做错了什么的解释,以及更好的方法的例子,我们表示赞赏 字典的一个例子是这样的(真正的字典要复杂得多,但遵循类似的模式: inDict = { "key1": "val", "key2": [], "ke
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。
正如我在上面所写的,我们非常感谢您提供的所有帮助。您将获得无,因为您的函数在它找到的第一个嵌套字典中进行递归搜索,即在本例中为
键3
。如果该键不在那里,它不会循环遍历实际字典中的其余键
我已经修改了你的函数
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感谢您的回答。我没有意识到我只输入了第一个嵌套字典,您的改进起到了作用!欢迎您,请将答案标记为已接受。