Python удаляет дубликаты словарей из списка

У меня есть список словарей

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

как удалить дубликаты, т.е. {'firstname': 'joe', 'surname': 'bloggs'} появляется дважды, так что хотите, чтобы он появлялся только один раз?

Ответ 1

Что-то вроде этого должно делать:

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

сначала, я преобразую inital dict в список кортежей, затем я помещаю их в набор (который удаляет записи дубликатов), а затем обратно в dict.

Ответ 2

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)