python - 比较两个列表中的用户定义对象
问题描述
我有一个类MyClass
,我还重写了__eq__
用于比较该类的两个对象的方法,我可以这样做:
obj1 = MyClass(a = 2)
obj2 = MyClass(a = 2)
obj1 == obj2 # gives me True
现在我的问题是我有两个列表,包括这个类的对象,我想比较set
这两个列表是否相同。这样我期望:
list1 = [MyClass(a=1), MyClass(a=2)]
list2 = [MyClass(a=2), MyClass(a=1)]
set(list1) == set(list2)
给我True
。但我遇到了这个错误:
TypeError: unhashable type: 'MyClass'
这显然是因为这set()
条线。我怎样才能做到这一点?(我不关心使用或不使用set
,只要我可以比较两个比较的对象列表,无论它们的顺序如何。)
解决方案
查看有关什么使类可散列的python 文档。您将需要同时实现__eq__
和__hash__
。您需要确保彼此相等的对象也产生相同的哈希值。
推荐阅读
- raspberry-pi3 - 我在 Raspberry Pi 上使用 Dakboard 信息亭,有没有办法将 GPIO 按钮编码为“F5”键盘输入以进行刷新?
- r - 使用 insertUI 和模块动态添加选项卡
- javascript - Visual Studio Code Chrome 调试器 - 开始调试时出错
- smtp - 通过 Microsoft Exchange Server 使用 Pentaho 发送邮件
- r - 如何在 r 的函数中使用数据框
- php - 如何配置 laravel 5 和 gclid
- c# - “System.Runtime,版本=4.2.1.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a”无法加载
- vue.js - 无法在父组件上监听子组件发出的事件
- python - 用于监控程序和控制微控制器的 Python 脚本
- nginx - Nginx 只允许我的域访问视频 url