gpt4 book ai didi

python - Python 中无法散列的查找表

转载 作者:太空狗 更新时间:2023-10-29 23:56:06 26 4
gpt4 key购买 nike

我需要创建一个从我自己的自定义类(从 dict 派生)的对象到另一个自定义类的对象的映射。在我看来,有两种方法可以做到这一点:

  1. 我可以使对象可哈希。我不确定我会怎么做。我知道我可以实现 __hash__() 但我不确定如何实际计算哈希值(它应该是一个整数)。

  2. 由于我的对象可以进行比较,所以我可以创建一个列表 [(myobj, myotherobj)],然后执行查找以查找元组中的第一项与查找键相同的元组。实现它是微不足道的(对象的数量很少),但如果标准库中已经存在类似的东西,我想避免重新发明轮子。

在我看来,想要查找 unhashables 是一个常见的问题,所以我假设有人已经解决了这个问题。关于如何为类似 dict 的对象实现 __hash()__ 的任何建议,或者是否有其他一些标准方法来制作不可散列的查找表?

最佳答案

以可变对象作为键的映射通常很困难。那真的是你想要的吗?如果您认为您的对象是不可变的(在 Python 中没有办法真正强制执行不可变性),或者您知道它们在用作映射中的键时不会被更改,您可以为它们实现自己的哈希函数几种方式。例如,如果您的对象只有可散列的数据成员,您可以返回所有数据成员的元组散列作为对象散列。

如果您的对象是类似字典的,您可以使用 frozenset 的哈希值所有键值对。

def __hash__(self):
return hash(frozenset(self.iteritems()))

这仅在所有值都是可哈希的情况下才有效。为了保存哈希值的重新计算(这将在每次查找时完成),您可以缓存哈希值并在设置了一些脏标志时重新计算它。

关于python - Python 中无法散列的查找表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4462119/

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