Python多嵌套字典中键存在性检测的代码问题排查
问题分析与修复
你的代码有几个关键问题导致结果不符合预期,咱们逐一拆解:
1. 返回值类型错误
你期望函数返回True/False,但原代码找到匹配键时返回的是对应的值(比如找"oui"时返回空字符串'',找"jih"时返回"je sais pas "),这显然不是你要的布尔结果。
2. 递归逻辑错误
在处理子字典时,你写了for result in find_key(key, v): return result——但find_key是一个返回单个值的函数,不是可迭代对象,这行代码会直接抛出TypeError(除非递归返回的是可迭代类型,但这里显然不是)。而且就算不报错,这种写法也只会检查第一个子字典,一旦当前子字典没找到键,就不会继续检查其他子项了。
3. 缺少默认返回值
当遍历完所有键和子字典都没找到目标键时,函数没有明确返回False,会默认返回None,这也不符合你的期望。
修复后的代码
下面是修正后的版本,完全符合你的需求:
def find_key(key, dicto): for k, v in dicto.items(): if k == key: return True # 找到键直接返回True elif isinstance(v, dict): # 递归检查子字典,如果子字典找到键,就返回True if find_key(key, v): return True # 遍历完所有项都没找到,返回False return False
测试你的示例
用你提供的data字典测试:
data = { "spam": { "egg": { "erwan": "Well..", "a": "ezeaea", "sausages": "Spam egg sausages and spam", "jih": "je sais pas " }, "oui": '' } } print(find_key("oui", data)) # 输出 True print(find_key("jih", data)) # 输出 True print(find_key("oezea", data)) # 输出 False
结果完全符合你的预期。
内容的提问来源于stack exchange,提问作者MelDev
相关产品推荐
相关产品推荐

