什么是实现__hash __()的正确和好方法?

什么是正确的好方法__hash__()?


我说的是一个返回哈希码的函数,然后该哈希码用于将对象插入哈希表(又名字典)。


作为__hash__()返回的整数,并用于将对象“绑定”到哈希表中,我假设返回的整数的值应均匀分配给公共数据(以最大程度地减少冲突)。获得这样的价值的最佳实践是什么?碰撞是个问题吗?在我的情况下,我有一个小类,它充当包含一些整数,一些浮点数和一个字符串的容器类。


千巷猫影
浏览 934回答 3
3回答

暮色呼如

一种简单而正确的实现方法__hash__()是使用键元组。它不会像专门的哈希那样快,但是如果需要,则应该在C中实现该类型。这是使用键进行哈希和相等的示例:class A:    def __key(self):        return (self.attr_a, self.attr_b, self.attr_c)    def __hash__(self):        return hash(self.__key())    def __eq__(self, other):        if isinstance(other, A):            return self.__key() == other.__key()        return NotImplemented此外,的文档__hash__还包含更多信息,这些信息在某些特定情况下可能会很有价值。

饮歌长啸

Microsoft Research的Paul Larson研究了各种哈希函数。他告诉我for c in some_string:    hash = 101 * hash  +  ord(c)对于各种各样的琴弦,效果都非常好。我发现类似的多项式技术可以很好地用于计算不同子字段的哈希。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python