【发布时间】:2018-07-22 14:11:16
【问题描述】:
我完全被这个问题所困扰。这在我看来是不可能的,但它确实发生了。
错误描述
假设我正在使用可散列类 Key 的对象将 Value 类的对象存储在 python 3 本机 dict 中。目前 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
奇怪,看起来字典已损坏或类似的东西......但是:
-
for k, v in d.items(): print(k, v)效果很好!
如果我这样做:
d2 = {}
for k, v in d.items():
d2[k] = v
那么d2[k1] 和d2[k2] 也可以正常工作。
有人遇到过这种问题吗?我完全没有想法......
【问题讨论】:
-
考虑重读how-to-ask 并提供符合How to create a Minimal, Complete, and Verifiable example 的代码。如果没有您的代码和您正在操作的数据,很难提供帮助。
-
您好,我自己还不能在一个小sn-p中重现该错误与您分享。
-
你确定
for k in d: print(d[k])提升KeyError?如果是这样,那么您的类的实现存在严重错误,除非您共享一些实际代码,否则我们无法帮助您。
标签: python-3.x dictionary hash key