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

时间:2015-06-26 03:45:12

标签: python list duplicates duplicate-removal nested-lists

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

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

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

这看起来并不十分困难,但我可能过于复杂并且遇到麻烦。我认为我接近一个解决方案,如果它完成并且没人接听,我会发布。

我的主要问题:

我真的希望我可以将列表转换为更常规情况下的集合 - 是否有任何方法可以设置等效的自定义定义?许多内置方法因此无法工作,并且重写它们有点痛苦,因为索引总是被搞砸了。

2 个答案:

答案 0 :(得分:3)

您可以创建一个存储数据的类并覆盖__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]))

答案 1 :(得分: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']]