我想在字典中测试一个键的存在,如果键不在字典中:做某事'我已经多次这样做了,但这次它表现得很奇怪.
尤其:
termCircuit = termCircuitMap[term]
Run Code Online (Sandbox Code Playgroud)
返回KeyError
当我在Eclipse PyDev中调试此代码时,我得到以下内容(使用表达式):
term in termCircutiMap # prints False
term in termCircuitMap.keys() # prints True
Run Code Online (Sandbox Code Playgroud)
有谁知道这有可能吗?我认为,如果某些东西在"密钥集"中,那么它就在字典中.
我附上了评估的截图.

非常感谢解释:)
Edw*_*per 11
如果__hash__未正确定义密钥的功能,您可能会看到此行为.例如,以下内容与您描述的行为大致相同:
import random
class Evil(int):
def __hash__(self):
return random.randint(0, 10000)
evil_vals = [Evil(n) for n in range(10)]
dict_with_evil_keys = dict((evil_val, None)
for evil_val in evil_vals)
print evil_vals[0] in dict_with_evil_keys # prints False
print evil_vals[0] in dict_with_evil_keys.keys() # prints True
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我正在生成随机哈希值,这显然是一个坏主意.如果您的键值是可变的,那么具有相同效果的不太明显的问题可能是.(通常,可变值不应该定义__hash__,也不应该用作字典中的键.)