2012-10-15 234 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]))]