Tom*_*ean 0 python hash dictionary python-dataclasses
我想用 a 替换代码中字典中的字符串键,dataclass以便我可以为键提供元数据以进行调试。但是,我仍然希望能够使用字符串来查找字典。我尝试使用替换函数实现数据类__hash__,但是我的代码未按预期工作:
from dataclasses import dataclass
@dataclass(eq=True, frozen=True)
class Key:
name: str
def __hash__(self):
return hash(self.name)
k = "foo"
foo = Key(name=k)
d = {}
d[foo] = 1
print(d[k]) # Key Error
Run Code Online (Sandbox Code Playgroud)
这两个哈希函数是相同的:
print(hash(k) == hash(foo)) # True
Run Code Online (Sandbox Code Playgroud)
所以我不明白为什么这不起作用。
具有不同哈希值的两个对象保证它们是不同的,但是具有相同哈希值的两个对象本身并不能保证它们是相同的(因为存在哈希冲突)。如果您希望Key被视为等于相应的str,请在 中实现__eq__:
def __eq__(self, other):
if isinstance(other, Key):
return self.name == other.name
if isinstance(other, str):
return self.name == other
return False
Run Code Online (Sandbox Code Playgroud)
这解决了KeyError您遇到的问题。
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |