在django python中计算dict列表中的重复项

时间:2011-11-23 06:54:33

标签: python django

如何在此列表中找到重复项的数量。

>>> 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 个答案:

答案 0 :(得分:6)

如果我正确理解您的请求, collections.Counter 将是计算重复项的有用方法。它仅适用于hashable输入,因此列表中的字典需要转换为已排序项的元组:

>>> 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})

不言而喻,副本是计数大于1的条目: - )

答案 1 :(得分:3)

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