gpt4 book ai didi

Python:使用可哈希对象访问字典失败

转载 作者:行者123 更新时间:2023-12-02 16:00:14 26 4
gpt4 key购买 nike

我正在使用可哈希对象作为字典的键。这些对象是可散列的,我可以将键值对存储在 dict 中,但是当我创建同一对象的副本时(给我相同的散列),我得到一个 KeyError

下面是一些小示例代码:

class Object:
def __init__(self, x): self.x = x
def __hash__(self): return hash(self.x)

o1 = Object(1.)
o2 = Object(1.)
hash(o1) == hash(o2) # This is True
data = {}
data[o1] = 2.
data[o2] # Desired: This should output 2.

在我上面的场景中,如何实现 data[o2] 也返回 2.

最佳答案

您需要同时实现__hash____eq__:

class Object:
def __init__(self, x): self.x = x
def __hash__(self): return hash(self.x)
def __eq__(self, other): return self.x == other.x if isinstance(other, self.__class__) else NotImplemented

根据 Python documentation :

if a class does not define an __eq__() method it should not define a __hash__() operation either

找到哈希后,Python 的字典使用 __eq__ 比较键并意识到它们不同,这就是您没有得到正确输出的原因。

关于Python:使用可哈希对象访问字典失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70849513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com