繁体   English   中英

根据前 2 个元素从嵌套列表中删除重复项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM