我完全陷入了这个问题。这对我来说似乎不可能,但它确实发生了。
错误描述
假设我正在使用hashable类Key的对象在python 3本机dict中存储类Value的对象。目前,dict只包含一个键和一个值。
当我在程序中稍后尝试使用键k1(d[k1]
)检索值v1时,我得到一个KeyError。它发生了,这里不需要问题。但是:
到目前为止我尝试了什么
我使用PyDev的调试器控制台来检查变量并找到错误。
在分配d[k1] = v1
之后,我可以毫无问题地访问v1。
错误发生的地方,我使用k2 = list(dict)[0]
检索了密钥。然后,即使使用dict中的k2,我在执行d[k2]
时也得到了相同的KeyError!
type(d)
=> class'dict'hash(k1)
等于hash(k2)
=> -6069959488783444446 k1.__equals__(k2)
和k1 == k2
=>真尝试其他一些东西:
d[list(d)[0]]
提出了一个KeyError for k in d: print(d[k])
提出了一个KeyError 很奇怪,看起来dict已经损坏或类似的东西......但是:
for k, v in d.items(): print(k, v)
效果非常好!如果我这样做:
d2 = {}
for k, v in d.items():
d2[k] = v
然后d2[k1]
和d2[k2]
效果也很好。
有人遇到过这样的问题吗?我完全没有想法......
答案 0 :(得分:0)
好的,我完全没有实现Key 哈希()方法。当改变的属性(对象是可变的)时,我返回了一个不同的哈希值!
我解决了它,但在哈希()中使用了id()函数。
哈希不匹配! ;)