根据重复项的自定义定义从列表中删除重复项

Removing duplicates from list based on custom definition of duplicate

我正在处理一个看起来像这样的嵌套列表。

mylist =[
    ["First", "Second", "Third"], 
    ["First", "Second", "Third"], 
    ...
]

目标是根据以下定义删除 mylist 的重复元素:如果 element1[0] == element2[0]element1[1] == element2[1],则一个元素等于另一个元素。基本上,只计算前两个元素,忽略其余部分。

这看起来并不难,但我可能把它弄得太复杂了,遇到了麻烦。我想我已经接近解决方案了,如果解决方案已经完成但没有人回答,我会 post。

我的主要问题:

我真希望我能像在更传统的情况下那样将列表变成一个集合——有什么方法可以给集合一个自定义的等价定义吗?许多内置方法因此而不起作用,重写它们有点痛苦,因为索引总是在某处搞砸了。

您可以制作一个 class 来存储数据并覆盖 __eq__:

class MyListThingy(object):
    def __init__(self, data):
        self.data = data
    def __eq__(self, other):
        return self.data[0]==other.data[0] and self.data[1]==other.data[1]

当然,这对使用散列的集合没有任何好处。为此你必须覆盖 __hash__:

def __hash__(self):
    return hash((self.data[0],self.data[1]))

您可以从内部列表中创建第一项和第二项的元组,用作字典中的键。然后将所有内部列表添加到字典中,这将导致删除重复项。

d = dict()
l =[["First", "Second", "Third"], ["First", "Second", "Fourth"]]
for item in l:
      d[(item[0], item[1])]=item

输出:(d.values())

[['First', 'Second', 'Fourth']]