也许我的Python字典理解不够好,但问题在于:在字典“eggs”中是否存在一对{yolk:shell},但是
因此,在大型代码中,我对字典执行多个
eggs.get(yolk)
会返回None
吗?因此,在大型代码中,我对字典执行多个
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]))
nodehashes
吗? - AKXclass Node
定义了__hash__
和/或__eq__
吗? - juanpa.arrivillagadef __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]))
- Jaswant P__eq__
和__hash__
方法呢? - AKX__eq__
用于检查两个节点在x,y方面是否相等。接下来是__hash__
。在另一个类中,我使用{nodehash,index}
构建了一个字典,其中nodehash
是hash(x,y)
,而index
是顶点缓冲区对象(https://www.khronos.org/opengl/wiki/Vertex_Specification#Vertex_Buffer_Object)中位置和颜色的索引。因此,我认为按位置哈希将是标识节点的唯一方法,但事实证明这是愚蠢的设计模式,我可以重写__hash__以返回对象的ID。 - Jaswant P