python tips:作为dict的key的类

Posted luoheng23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python tips:作为dict的key的类相关的知识,希望对你有一定的参考价值。

Python的dict由hash实现,解决hash冲突的方法是二次探查法。hash值相同的元素会形成链表。所以dict在查找key时,首先获取hash值,直接得到链表的表头;而后在链表中查找等于key的值。

所以要使一个对象的实例能够作为dict的key值,一般需要实现__hash__和__eq__两个方法。

没有实现__eq__方法的类的实例总是不相等(引用总是不同)

 1 class A:
 2     def __hash__(self):
 3         return 2
 4 
 5 a = A()
 6 b = A()
 7 d = a:0
 8 if b in d:
 9     print(d[b])
10 else:
11     print("b is not in d")

输出结果

1 b is not in d

可以用于key的实例

 1 class A:
 2     def __hash__(self):
 3         return 2
 4     
 5     def __eq__(self, other):
 6         return True
 7 
 8 a = A()
 9 b = A()
10 d = a:0
11 if b in d:
12     print(d[b])
13 else:
14     print("b is not in d")

输出结果

1 0

总结:

1. 要作为dict的key,需要能够求hash值(key为不可变对象),需要能比较(是否相等)

2. 对于类来说,实例求hash需要实现__hash__,比较是否相等需要实现__eq__(默认比较引用,不同实例的引用总是不同)

 

以上是关于python tips:作为dict的key的类的主要内容,如果未能解决你的问题,请参考以下文章

python继承细节

python 统计list中各个元素出现的次数

python内置函数字典(dict)

python3 与dict相关的魔法方法。使用于二叉搜索树的类中

Python基础知识:字典dict

python tips:类与实例的属性问题