paf*_*fcu 6 python lookup hash lookup-tables
我需要创建一个从我自己的自定义类(从dict派生)的对象到另一个自定义类的对象的映射.我认为有两种方法可以做到这一点:
我可以使对象可以清洗.我不确定我会怎么做.我知道我可以实现,__hash__()但我不确定如何实际计算哈希值(应该是一个整数).
由于我的对象可以比较,我可以创建一个列表[(myobj,myotherobj)],然后实现一个查找,找到元组中第一个项与查找键相同的元组.实现这个是微不足道的(对象的数量很小)但我想避免重新发明轮子,如果这样的东西已经存在于标准库中.
在我看来,想要查找不可用的东西将是一个常见的问题,所以我认为有人已经解决了这个问题.有关如何实现__hash()__类似dict的对象的任何建议,或者是否有其他标准方法来制作不可读的查找表?
使用可变对象作为键的映射通常很困难。这真的是你想要的吗?如果你认为你的对象是不可变的(在Python中没有办法真正强制不可变性),或者你知道它们在映射中用作键时不会改变,你可以为它们实现你自己的哈希函数有几种方法。例如,如果您的对象仅具有可散列数据成员,则可以返回所有数据成员的元组的散列作为对象散列。
如果您的对象是类似字典的,您可以使用所有键值对的冻结集的哈希值。
def __hash__(self):
return hash(frozenset(self.iteritems()))
Run Code Online (Sandbox Code Playgroud)
仅当所有值都是可散列的时,这才有效。为了节省哈希值的重新计算(这将在每次查找时完成),您可以缓存哈希值,并在设置了某些脏标志时重新计算它。