我有一个嵌套字典,这真的很复杂。我试图找到一个特定的键/值组合,并返回该值("value"是一本字典)。我尝试使用递归函数,但得到None返回。
正如您可能看到的,我正在学习编码,这可能是一种幼稚的方法。我很感激你能解释我做错了什么,并举例说明更好的方法。
字典的一个例子是这样的(真正的字典要复杂得多,但遵循类似的模式):
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作为返回值退出递归函数。正如我上面所写的,感谢所有的帮助。
您得到无因为你的函数首先在中进行递归搜索它找到的嵌套字典,即本例中的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