python tips:作为dict的key的类
Python的dict由hash实现,解决hash冲突的方法是二次探查法。hash值相同的元素会形成链表。所以dict在查找key时,首先获取hash值,直接得到链表的表头;而后在链表中查找等于key的值。
所以要使一个对象的实例能够作为dict的key值,一般需要实现__hash__和__eq__两个方法。
没有实现__eq__方法的类的实例总是不相等(引用总是不同)
class A:
def __hash__(self):
return 2 a = A()
b = A()
d = {a:0}
if b in d:
print(d[b])
else:
print("b is not in d")
输出结果
b is not in d
可以用于key的实例
class A:
def __hash__(self):
return 2 def __eq__(self, other):
return True a = A()
b = A()
d = {a:0}
if b in d:
print(d[b])
else:
print("b is not in d")
输出结果
0
总结:
1. 要作为dict的key,需要能够求hash值(key为不可变对象),需要能比较(是否相等)
2. 对于类来说,实例求hash需要实现__hash__,比较是否相等需要实现__eq__(默认比较引用,不同实例的引用总是不同)
python tips:作为dict的key的类的更多相关文章
- python tips(持续更新中)
python tips 可变对象与不可变对象 在python中,可变对象有数值类型(int,float),字符串(str),元组(tuple),可变对象有列表(list),字典(dict),集合(se ...
- python基础之dict、set及字符
python基础之dict.set及字符串处理 本节内容 字典介绍及内置方法 集合介绍 字符串处理 1.字典介绍及内置方法 字典是python中唯一的映射类型,采用键值对(key-value)的形式存 ...
- Python - Tips
01 - input与raw_input的区别 input() #可以直接输入数字,但输入字符的要用引号''或者双引号"" raw_input() #将所有的输入都直接当作一串字符 ...
- 第四篇:python基础之dict、set及字符
python基础之dict.set及字符 python基础之dict.set及字符串处理 本节内容 字典介绍及内置方法 集合介绍 字符串处理 1.字典介绍及内置方法 字典是python中唯一的映射 ...
- [转]Python tips: 什么是*args和**kwargs?
Python tips: 什么是*args和**kwargs? 原文地址:http://www.cnblogs.com/fengmk2/archive/2008/04/21/1163766.html ...
- Python Tips阅读摘要
发现了一本关于Python精通知识点的好书<Python Tips>,关于Python的进阶的技巧.摘录一些比较有价值的内容作为分享. *args and **kwargs 在函数定义的时 ...
- Python标准库——collections模块的Counter类
1.collections模块 collections模块自Python 2.4版本开始被引入,包含了dict.set.list.tuple以外的一些特殊的容器类型,分别是: OrderedDict类 ...
- 【转载】Python tips: 什么是*args和**kwargs?
转自Python tips: 什么是*args和**kwargs? 先来看个例子: def foo(*args, **kwargs): print 'args = ', args print 'kwa ...
- python字典(dict)
1.字典dict定义 初始化 key-value键值对的数据的集合,可变.无序.key不重复(哈希.唯一) 1> d = dict() 或者 d = {} # -*- coding:utf-8 ...
随机推荐
- 利用jQuery设计横/纵向菜单
在网页中,菜单扮演着"指路者"的角色.怎样设计一个人性化的菜单呢.以下小编带着大家一起做. 效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi ...
- android注解使用具体解释(图文)
在使用Java的SSH框架的时候,一直在感叹注解真是方便啊,关于注解的原理,大家能够參考我的还有一片文章Java注解具体解释. 近期有时间研究了android注解的使用,今天与大家分享一下. andr ...
- HPU 1002 A + B Problem II【大数】
A + B Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- scikit-learn:通过Non-negative matrix factorization (NMF or NNMF)实现LSA(隐含语义分析)
之前写过两篇文章.各自是 1)矩阵分解的综述:scikit-learn:2.5.矩阵因子分解问题 2)关于TruncatedSVD的简介:scikit-learn:通过TruncatedSVD实现LS ...
- 《Spring技术内幕》笔记-第二章 IoC容器的实现
简单介绍 1,在Spring中,SpringIoC提供了一个主要的JavaBean容器.通过IoC模式管理依赖关系.并通过依赖注入和AOP切面增强了为JavaBean这样子的POJO提供事务管理,生命 ...
- BAPC2014 B&&HUNNU11582:Button Bashing(BFS)
题意: 给出n,m,代表微波炉有n个button,要求达到总时间为m 然后给出n个数.代表n个button能添加的时间,问最少几步,可以使得按出的总时间大于等于要求的时间,而且相差最小 输出最小的步数 ...
- oc64--协议2@protocol
// // SportProtocol.h // day17 // #import <Foundation/Foundation.h> @protocol SportProtocol &l ...
- 【POJ 3460】 Booksort
[题目链接] http://poj.org/problem?id=3460 [算法] IDA* 注意特判答案为0的情况 [代码] #include <algorithm> #include ...
- C++调用shell脚本
调用函数时候,传入脚本路径名称或者具体命令. int shell_call(std::string &cmdstr) { }; char line[maxline]; FILE *fpin; ...
- Python入门 来点栗子
查天气(1) http://wthrcdn.etouch.cn/weather_mini?citykey=101280804 http://wthrcdn.etouch.cn/WeatherApi?c ...