从列表中删除重复项最方便的"Pythonic"方法基本上是:

mylist = list(set(mylist))

但假设计算重复项的标准取决于mylist中包含的对象的特定成员字段.

一个解决方案是为mylist中的对象定义__eq____hash__,然后classic list(set(mylist))就可以工作了.

但有时你会有一些需要更灵活一点的需求.能够动态创建lambda,使用自定义比较 routine 以不同的方式识别重复项,这将非常方便.理想的情况是:

mylist = list(set(mylist, key = lambda x: x.firstname))

当然,这实际上不起作用,因为set构造函数不使用比较函数,set也需要可散列键.

那么,实现这一点的最接近的方法是什么,这样您就可以使用任意比较函数删除重复项了?

推荐答案

您可以使用dict而不是set,其中dict的键将是唯一的值:

d = {x.firstname: x for x in mylist}
mylist = list(d.values())

Python-3.x相关问答推荐

为什么vs code返回错误—LocaleError:int对象没有属性where,但相同的代码运行在Google Colab上没有任何问题''''

如何将CSV或FDF数据解析到Python词典并注入到模板PDF表单中?

使用PANAS根据另两个列表中的值对一个列表中的字符串值进行分组

像计数不显示在html和想知道如果我的模型设置正确

Numba编译时间呈指数级增长--可以像C编译器一样配置优化级别吗?

从.csv导入将文件夹路径加入到文件名

Heroku 中的未知错误代码缺少一个或多个参数

如何沿单列获取嵌套列表中的唯一值?

如何计算Pandas 列中每列唯一项目的出现次数?

双轴上的刻度和标签

当我判断另一个 checkButton 时,如何判断两个 python tkinter checkButtons?

Python:如何从句子/段落中提取地址(非正则表达式方法)?

使用一周的特定第一天将每日日期转换为每周

Await Future 来自 Executor:Future 不能在await表达式中使用

在 Python 3 中使用 unittest.mock 修补 input()

Pylint 给我最后的新行丢失

为什么排序列表比未排序列表大

异常被忽略是什么类型的消息?

python中的绝对导入是什么?

有没有办法在多个线程中使用 asyncio.Queue ?