从列表中删除重复项最方便的"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
也需要可散列键.
那么,实现这一点的最接近的方法是什么,这样您就可以使用任意比较函数删除重复项了?