30 Stimmen

python Entfernen doppelter Wörterbücher aus einer Liste

Ich habe eine Liste von Wörterbüchern

l = [
{'firstname': 'joe', 'surname': 'bloggs'},
{'firstname': 'john', 'surname': 'smith'},
{'firstname': 'joe', 'surname': 'bloggs'},
{'firstname': 'jane', 'surname': 'bloggs'}
]

Wie entferne ich Duplikate, d.h. {'firstname': 'joe', 'surname': 'bloggs'} zweimal erscheint und daher nur einmal erscheinen soll?

66voto

Cédric Julien Punkte 74976

So etwas sollte genügen:

result = [dict(tupleized) for tupleized in set(tuple(item.items()) for item in l)]

Zunächst wandle ich das ursprüngliche Diktat in eine Liste von Tupeln um, dann setze ich sie in ein Set um (wobei doppelte Einträge entfernt werden), und dann wieder in ein Diktat.

14voto

Turkesh Patel Punkte 161
import itertools

import operator

from operator import itemgetter

import pprint

l = [

{'firstname': 'joe', 'surname': 'bloggs'},

{'firstname': 'john', 'surname': 'smith'},

{'firstname': 'joe', 'surname': 'bloggs'},

{'firstname': 'jane', 'surname': 'bloggs'}

]

getvals = operator.itemgetter('firstname', 'surname')

l.sort(key=getvals)

result = []

for k, g in itertools.groupby(l, getvals):

    result.append(g.next())

l[:] = result

pprint.pprint(l)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X