[英]Removing duplicates from nested list based on first 2 elements
仅当前两个元素相同时,我才尝试从嵌套列表中删除重复项,而忽略第三个。
列表:
L = [['el1','el2','value1'], ['el3','el4','value2'], ['el1','el2','value2'], ['el1','el5','value3']]
将返回:
L = [['el3','el4','value2'], ['el1','el2','value2'], ['el1','el5','value3']]
我在这里找到了一种类似的简单方法:
dict((x[0], x) for x in L).values()
但这仅适用于第一个元素而不是前 2 个,但这正是我想要的。
如果顺序无关紧要,您可以使用相同的方法,但使用第一个和第二个元素的元组作为键:
{(x[0], x[1]): x for x in L}.values()
或者在 2.7 之前的 Python 版本上:
dict(((x[0], x[1]), x) for x in L).values()
您可以使用tuple(x[:2])
代替(x[0], x[1])
) ,使用您认为更具可读性的任何一个。
如果顺序很重要,请使用仅包含嵌套列表的前两个元素的set
:
seen = set()
seen_add = seen.add
return [x for x in seq if tuple(x[:2]) not in seen and not seen_add(tuple(x[:2]))]
或者您可以使用collections.OrderedDict()
对象来保持订单; 将x[:2]
切片保留为键(作为元组),并提取值:
from collections import OrderedDict(
return OrderedDict((tuple(x[:2]), x) for x in seq).values()
在 Python 3.6 及更高版本中,标准 dict 类型恰好也保留了插入顺序:
return list({tuple(x[:2]): x for x in seq}.values())
需要list()
调用将字典视图对象转换为列表。
这应该这样做:
In [55]: dict((tuple(x[:2]), x) for x in L).values()
Out[55]: [['el1', 'el2', 'value2'], ['el1', 'el5', 'value3'], ['el3', 'el4', 'value2']]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.