Python 3.x Python3 dict KeyError与右哈希

Python 3.x Python3 dict KeyError与右哈希,python-3.x,dictionary,hash,key,Python 3.x,Dictionary,Hash,Key,我完全被这个问题困住了。这对我来说似乎是不可能的,但它确实发生了 错误描述 假设我正在使用一个可哈希类键的对象在Python3本机dict中存储类值的对象。目前,dict只包含一个键和一个值 稍后在程序中,我尝试使用键k1检索值v1(d[k1]),我得到一个键错误。它发生了,这里不需要一个问题。但是: 我到目前为止所做的尝试 我使用PyDev的调试器控制台检查变量并找到bug。 在分配d[k1]=v1之后,我可以毫无问题地访问v1 在出现错误的地方,我使用k2=list(dict)[0]检索了密

我完全被这个问题困住了。这对我来说似乎是不可能的,但它确实发生了

错误描述

假设我正在使用一个可哈希类键的对象在Python3本机dict中存储类值的对象。目前,dict只包含一个键和一个值

稍后在程序中,我尝试使用键k1检索值v1(
d[k1]
),我得到一个键错误。它发生了,这里不需要一个问题。但是:

我到目前为止所做的尝试

我使用PyDev的调试器控制台检查变量并找到bug。 在分配
d[k1]=v1之后,我可以毫无问题地访问v1

在出现错误的地方,我使用
k2=list(dict)[0]
检索了密钥。然后,即使使用dict中的k2,我在执行
d[k2]
时也会遇到相同的键错误

  • 以防万一:
    类型(d)
    =>类“dict”
  • 相同的散列:
    散列(k1)
    等于
    散列(k2)
    =>-60699594887834446
  • 等于:
    k1.\uu等于(k2)
    k1==k2
    =>True
试试其他东西:

  • d[list(d)[0]
    引发一个键错误
  • 对于d中的k:print(d[k])
    引发一个键错误
奇怪的是,看起来字典被破坏了或者类似的东西。。。但是:

  • 用于d中的k,v。items():打印(k,v)
    效果非常好
如果我这样做了:

d2 = {}
for k, v in d.items():
    d2[k] = v
然后
d2[k1]
d2[k2]
也能正常工作


有人遇到过这样的问题吗?我完全没有主意了…

好的,我在实现Keyhash()方法时完全失败了。当属性发生更改时,我返回了一个不同的哈希值(对象是可变的)

我解决了这个问题,但使用了散列中的id()函数


散列不匹配!;)

考虑重新阅读并提供代码。如果没有你的代码和你正在操作的数据,就很难帮助你解决问题。嗨,我现在还不能在一个小片段中重现这个错误与你分享。你确定
for k in d:print(d[k])
会引发
KeyError
?如果是这样,那么您的类的实现就出现了严重错误,除非您共享一些实际的代码,否则我们无法帮助您。