2012-10-15 201 views
4

我试图从只有当第2个元素是相同的,忽略了第三嵌套列表中删除重复...删除重复

列表:

L = [['el1','el2','value1'], ['el3','el4','value2'], ['el1','el2','value2'], ['el1','el5','value3']] 

将返回:

L = [['el3','el4','value2'], ['el1','el2','value2'], ['el1','el5','value3']] 

我发现了一个简单的方法做类似的here

dict((x[0], x) for x in L).values() 

但这只适用于第一个元素,而不是第2个,但这正是我想要的。

回答

4

如果顺序并不重要,你可以用同样的方法,但使用第一和第二要素为重点的元组:

dict(((x[0], x[1]), x) for x in L).values() 

或者关于Python 2.7和更高版本:

{(x[0], x[1]): x for x in L}.values() 

而不是(x[0], x[1])你可以使用tuple(x[:2]),使用你发现更可读的。

2

这应该这样做:

In [55]: dict((tuple(x[:2]), x) for x in L).values() 
Out[55]: [['el1', 'el2', 'value2'], ['el1', 'el5', 'value3'], ['el3', 'el4', 'value2']] 
2

如果为了事项,使用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]))]