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实现字符串反转的常用方法分析【4种方法】
Sep 30 Python
Python实现的排列组合计算操作示例
Oct 13 Python
Python利用公共键如何对字典列表进行排序详解
May 19 Python
Sanic框架流式传输操作示例
Jul 18 Python
python中实现控制小数点位数的方法
Jan 24 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
May 18 Python
Python3视频转字符动画的实例代码
Aug 29 Python
如何基于Python制作有道翻译小工具
Dec 16 Python
python每5分钟从kafka中提取数据的例子
Dec 23 Python
关于Pytorch的MLP模块实现方式
Jan 07 Python
Python os模块常用方法和属性总结
Feb 20 Python
解决python存数据库速度太慢的问题
Apr 23 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
收音机的保养
2021/03/01 无线电
实用函数7
2007/11/08 PHP
php图片的二进制转换实现方法
2014/12/15 PHP
php操作xml入门之cdata区段
2015/01/23 PHP
PHP7.0安装笔记整理
2015/08/28 PHP
javascript作用域容易记错的两个地方分析
2012/06/22 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
JS获取网页图片name属性的方法
2015/04/01 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
javascript history对象详解
2017/02/09 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
2020/08/13 Javascript
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
html5移动端价格输入键盘的实现
2019/09/16 HTML / CSS
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
电信专业毕业生推荐信
2013/11/18 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
2015年纪念“卢沟桥事变”78周年活动方案
2015/05/06 职场文书
电影红河谷观后感
2015/06/11 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书