Подсчитайте дубликаты в списке dict в django python

Как я могу найти количество дубликатов в этом списке.

>>> result = SiteTags.objects.values('content_type','object_id')
>>> result
[{'object_id': 1, 'content_type': 46}, {'object_id': 1, 'content_type': 46}, {'object_id': 2, 'content_type': 42}]

Есть ли вообще найти в запросе? или другим способом?

Спасибо!

2 ответа

Решение
set(tuple(sorted(r.iteritems())) for r in result)

дает вам набор уникальных элементов в этом списке. Возьмите его длину и сравните с len(result),

Чтобы получить каждый элемент и его количество в результате:

counter = {}
for r in result:
    tup = tuple(sorted(r.iteritems()))
    counter[tup] = counter.get(tup, 0) + 1
for tup, cnt in counter.iteritems():
    print dict(tup), cnt

печатает:

{'object_id': 2, 'content_type': 42} 1
{'object_id': 1, 'content_type': 46} 2

Если я правильно понимаю ваш запрос, то collection.Counter будет полезен для подсчета дубликатов. Он работает только с хэшируемыми входными данными, поэтому в ваших словарях в списке необходимо преобразовать кортежи отсортированных элементов:

>>> from collections import Counter
>>> Counter([tuple(sorted(d.items())) for d in result])
Counter({(('content_type', 46), ('object_id', 1)): 2, (('content_type', 42), ('object_id', 2)): 1})

Вероятно, само собой разумеется, что дубликаты - это записи с числом больше единицы:-)

Другие вопросы по тегам