Python dict.get(k)返回none,即使键存在

2024-09-29 18:52:06 发布

您现在位置:Python中文网/ 问答频道 /正文

也许我对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]))

Tags: key代码selfnodegetreturn字典object
1条回答
网友
1楼 · 发布于 2024-09-29 18:52:06

如果在可变对象上有一个自定义的__hash__方法,则可以复制该方法:

class A:
    def __hash__(self):
        return hash(self.a)

>>> a1 = A()
>>> a2 = A()
>>> a1.a = 1
>>> a2.a = 2
>>> d = {a1: 1, a2: 2}
>>> a1.a = 3
>>> d.items()
dict_items([(<__main__.A object at 0x7f1762a8b668>, 1), (<__main__.A object at 0x7f17623d76d8>, 2)])
>>> d.get(a1)
None

您可以看到d.items()仍然可以访问两个A对象,但是get无法再找到它,因为hash值已更改

相关问题 更多 >

    热门问题