Eliminación de duplicados de la lista anidada según los primeros 2 elementos

Estoy tratando de eliminar duplicados de una lista anidada solo si los primeros 2 elementos son iguales, ignorando el tercero …

Lista:

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

Volvería:

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

He encontrado una manera simple de hacer similar aquí :

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

pero esto solo funciona para el primer elemento y no para los primeros 2, pero eso es exactamente lo que quiero de otra manera.

Si el orden no importa, puedes usar el mismo método pero usando una tupla del primer y segundo elemento como clave:

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

O en Python 2.7 y superior:

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

En lugar de (x[0], x[1]) puede usar la tuple(x[:2]) , use la que encuentre más legible.

Si el orden importa, use un set con solo los dos primeros elementos de sus listas anidadas:

 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]))] 

o podría usar un objeto collections.OrderedDict() para mantener el orden; mantenga las x[:2] cortes como claves (como tuplas), y extraiga los valores:

 from collections import OrderedDict( return OrderedDict((tuple(x[:2]), x) for x in seq).values() 

En Python 3.6 y versiones posteriores, el tipo de dict estándar también retiene el orden de inserción:

 return list({tuple(x[:2]): x for x in seq}.values()) 

La llamada a la list() es necesaria para convertir el objeto de vista de diccionario en una lista.

esto debería hacerlo:

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