python中的set实现不重复的排序原理


Posted in Python onJanuary 24, 2018

最近在尝试写选课系统的时候遇到一个问题:

1、存在两个类 School、Teacher ;

2、School实例中包含多个Teacher的实例,但又不可重复

本人想到在School中用set()存储,但是添加Teacher实例的时候做不到去重,后来猜测应该是set会自动调用__eq__方法比较对象是否重复,因此重写了该方法:

def __eq__(self, other):
  return self.name == other.name

 

结果仍然报错TypeError: unhashable type,如下:

python中的set实现不重复的排序原理

研究了很久,发现Teacher无法hash的原因是该类中缺少__hash__方法,导致解释器不知道如何哈希该对象,添加以下代码后问题解决:

def __hash__(self):
    return hash(self.name)

综上发现:

如果想要将对象用set去重,需要重写__eq__和__hash__两个方法。

总结

以上所述是小编给大家介绍的python中的set实现不重复的排序原理,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python可跨平台实现获取按键的方法
Mar 05 Python
python根据时间生成mongodb的ObjectId的方法
Mar 13 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
Aug 16 Python
详解Python验证码识别
Jan 25 Python
django 创建过滤器的实例详解
Aug 14 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
Sep 20 Python
Python 旋转打印各种矩形的方法
Jul 09 Python
Python远程开发环境部署与调试过程图解
Dec 09 Python
Python OpenCV读取显示视频的方法示例
Feb 20 Python
Keras实现将两个模型连接到一起
May 23 Python
Python 实现自动登录+点击+滑动验证功能
Jun 10 Python
python基础之爬虫入门
May 10 Python
详解Python之unittest单元测试代码
Jan 24 #Python
python爬取拉勾网职位数据的方法
Jan 24 #Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 #Python
Python实现的生成格雷码功能示例
Jan 24 #Python
Python使用requests及BeautifulSoup构建爬虫实例代码
Jan 24 #Python
Python3结合Dlib实现人脸识别和剪切
Jan 24 #Python
深入浅析Python中的yield关键字
Jan 24 #Python
You might like
php目录操作函数之获取目录与文件的类型
2010/12/29 PHP
PHP中使用CURL模拟登录并获取数据实例
2014/07/01 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
php unlink()函数使用教程
2018/07/12 PHP
简单实用的PHP文本缓存类实例
2019/03/22 PHP
JavaScript 面向对象编程(2) 定义类
2010/05/18 Javascript
JavaScript中的关键字"VAR"使用详解 分享
2013/07/31 Javascript
window.open打开页面居中显示的示例代码
2013/12/27 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
JS求解三元一次方程组值的方法
2017/01/03 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
微信小程序实现动态获取元素宽高的方法分析
2018/12/10 Javascript
javascript实现日历效果
2019/06/17 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
[15:15]教你分分钟做大人:狙击手
2014/10/30 DOTA
利用python实现周期财务统计可视化
2019/08/25 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
python实现电子词典
2020/03/03 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
python中threading和queue库实现多线程编程
2021/02/06 Python
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
美国宠物用品网站:Value Pet Supplies
2018/03/17 全球购物
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
工作失职检讨书范文
2014/01/16 职场文书
2014爱耳日宣传教育活动总结
2014/03/09 职场文书
质量标语大全
2014/06/12 职场文书
奥运会口号
2014/06/13 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
结婚典礼主持词
2015/06/29 职场文书
生日寿星公答谢词
2015/09/29 职场文书
Django REST framework 限流功能的使用
2021/06/24 Python