根据重复项的自定义定义从列表中删除重复项
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']]
我正在处理一个看起来像这样的嵌套列表。
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']]