也许我对python字典的理解不太好。但问题是
字典中存在{yolk: shell}
对,说eggs
,但是eggs.get(yolk)
可以返回^{
因此,在一个大型代码中,我对一个字典执行多个get
操作,在某些迭代之后,我观察到这种情况
>>> for key, value in nodehashes.items():
... print(key, nodehashes.get(key), value)
............................
...........................
<Graph.Node object at 0x00000264128C4DA0> 3309678211443697093 3309678211443697093
<Graph.Node object at 0x00000264128C4DD8> 3554035049990170053 3554035049990170053
<Graph.Node object at 0x00000264128C4E10> None -7182124040890112571 # Look at this!!
<Graph.Node object at 0x00000264128C4E48> 3268020121048950213 3268020121048950213
<Graph.Node object at 0x00000264128C4E80> -1243862058694105659 -1243862058694105659
............................
............................
乍一看,代码中的某个地方似乎删除了键,但是nodehashes.items()
如何返回正确的键值对呢?我扫荡了整个地区,我一个项目也没有。这怎么会发生
我知道我不发布一个示例是错误的,但我真的不知道从哪里开始查找代码,节点在开始时是散列的,它们只能通过get
访问。令人惊讶的是,即使PyCharm的调试器也显示存在键值对。但是get
返回None。所以,如果有人以前发现过这一点,我洗耳恭听
def __eq__(self, other):
if (self.x == other.x) and (self.y == other.y):
return True
else:
return False
def __hash__(self):
return hash(tuple([self.x, self.y]))
如果在可变对象上有一个自定义的
__hash__
方法,则可以复制该方法:您可以看到
d.items()
仍然可以访问两个A
对象,但是get
无法再找到它,因为hash
值已更改相关问题 更多 >
编程相关推荐