2012-06-20 12 views
5

Nehmen wir an, ich habe eine Liste von Diktaten. Ich definiere "Duplikate" als zwei beliebige Dicts in der Liste, die denselben Wert für das Feld "id" haben (auch wenn die anderen Felder unterschiedlich sind). Wie entferne ich diese Duplikate?Wie entferne ich Dicts aus einer Liste mit doppelten Feldern in Python?

Ein Beispiel Liste wäre so etwas wie:

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

In diesem Fall ‚Mike‘ und ‚Dan‘ wäre Duplikate, und einer von ihnen entfernt werden muss. Es spielt keine Rolle, welcher.

+1

Dies ist ein Duplikat einer Frage von gestern http://stackoverflow.com/questions/11092511/python-list-of-unique-dictionaries –

+0

Es ist ein wenig anders, da dieser Benutzer dicts entfernen wollte, dass waren völlig identisch, während ich Dicts entfernen wollte, die in einem einzigen Feld identisch waren, auch wenn alle anderen Felder unterschiedlich waren. – philpee2

+0

Nein, erklärte das OP in einem Kommentar, dass dies genau das ist, was sie tun wollten. Die Lösung ist identisch. Sogar der Feldname ist derselbe –

Antwort

11

Dump sie in ein anderes Wörterbuch, dann ziehen Sie sie nach.

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

Das Verständnis der folgenden Funktion sollte Ihr Problem lösen.

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