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中的匿名函数使用简介
Apr 27 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
Windows下Python2与Python3两个版本共存的方法详解
Feb 12 Python
浅析python中SQLAlchemy排序的一个坑
Feb 24 Python
Python实现自动登录百度空间的方法
Jun 10 Python
Python更新数据库脚本两种方法及对比介绍
Jul 27 Python
Python机器学习库scikit-learn安装与基本使用教程
Jun 25 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 Python
python下载库的步骤方法
Oct 12 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
解决python运行启动报错问题
Jun 01 Python
python exit出错原因整理
Aug 31 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
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
angularjs 处理多个异步请求方法汇总
2015/01/06 Javascript
javascript实现Email邮件显示与删除功能
2015/11/21 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
2016/05/05 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
shiro授权的实现原理
2017/09/21 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
vue组件 keep-alive 和 transition 使用详解
2019/10/11 Javascript
vue.js iview打包上线后字体图标不显示解决办法
2020/01/20 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
vue结合el-upload实现腾讯云视频上传功能
2020/07/01 Javascript
200 行python 代码实现 2048 游戏
2018/01/12 Python
详解python实现线程安全的单例模式
2018/03/05 Python
Django model反向关联名称的方法
2018/12/15 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
详解python中的闭包
2020/09/07 Python
Currentbody西班牙:美容仪专家
2019/09/28 全球购物
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
硕士研究生个人求职信
2013/12/04 职场文书
给校长的建议书
2014/03/12 职场文书
英语求职信范文
2014/05/23 职场文书
优秀少先队员主要事迹材料
2014/05/28 职场文书
终止或解除劳动合同及劳动关系的证明书
2014/10/06 职场文书
关于运动会广播稿200字
2014/10/08 职场文书
个人工作表现自我评价
2015/03/06 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
母亲去世追悼词
2015/06/23 职场文书
(开源)微信小程序+mqtt,esp8266温湿度读取
2021/04/02 Javascript
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL