2012-06-20 8 views
5

Digamos que tengo una lista de dicts. Defino "duplicados" como dos cualquiera de los dos en la lista que tienen el mismo valor para el campo "id" (incluso si los otros campos son diferentes). ¿Cómo elimino estos duplicados?¿Cómo elimino los dictados de una lista con campos duplicados en python?

una lista de ejemplo sería algo así como:

[{'name': 'John' , 'id':1}, {'name': 'Mike' , 'id':5},{'name': 'Dan' , 'id':5}] 

En este caso, 'Mike' y 'Dan' serían duplicados, y uno de ellos tiene que ser eliminado. No importa cuál.

+1

Este es un duplicado de una pregunta de ayer http://stackoverflow.com/questions/11092511/python-list-of-unique-dictionaries –

+0

Es un poco diferente, ya que el usuario desea eliminar predice que eran completamente idénticos, mientras que yo quería eliminar los dicts que eran idénticos en un solo campo, incluso si todos los demás campos eran diferentes. – philpee2

+0

No, el OP aclaró en un comentario que esto es exactamente lo que querían hacer. La solución es idéntica. Incluso el nombre del campo es el mismo –

Respuesta

11

Vuelque en otro diccionario, luego extráigalos.

dict((x['id'], x) for x in L).values() 
2

La siguiente lista de funciones de comprensión debería resolver su problema.

def f(seq): 
    s = set() 
    return [x for x in seq if x['id'] not in s and not s.add(x['id'])] 
Cuestiones relacionadas