Python中if语句异常求助:字典值查键失败
问题分析与修正
咱们直接戳核心问题:你写的if value in d:是在检查输入内容是不是字典d的键(也就是1、2、3这类数字),但你输入的'a'是字典里的值,所以这个条件永远不成立,自然会跳到else分支。
再拆解下你代码里的几个具体错误:
- 成员判断逻辑错了:
in操作符作用在字典上时,默认只检查键是否存在,不会去匹配值。如果要检查值是否在字典里,得用if value in d.values()。 - 取值代码完全不符合语法:
d.keys["value"]是明显的错误写法——首先d.keys()才是获取键集合的正确方式(Python2里返回列表),其次就算拿到了键列表,你也不能用字符串"value"去索引,而且这根本不是根据值找键的正确逻辑。 - 没考虑多键对应同值的情况:你的字典里有3个键(1、4、7)都对应'a',原代码只想着取一个键,但实际上可能需要返回所有匹配的结果。
下面是修正后的Python2代码,我写了两种场景供你选择:
d={1:'a', 2:'b', 3:'c', 4:'a', 5:'d', 6:'e', 7:'a', 8:'b'} value = raw_input("Choose a value to be searched: ") # 场景1:只返回第一个匹配的键 matching_keys = [key for key, val in d.items() if val == value] if matching_keys: print("First matching key:", matching_keys[0]) else: print("There isn't such value in the dictionary") # 场景2:返回所有匹配的键(把上面的代码注释掉,用下面的) # if matching_keys: # print("All matching keys:", matching_keys) # else: # print("There isn't such value in the dictionary")
简单说下修正逻辑:用列表推导式遍历字典的键值对(d.items()会返回所有(key, value)元组),筛选出值等于输入内容的键,然后判断这个结果列表是否为空——不为空就说明找到了匹配的键,否则输出不存在的提示。
内容的提问来源于stack exchange,提问作者markolosole
相关产品推荐
相关产品推荐

