作为一个Python n00bie,我偶然发现了一个被证明是不可解决的问题使用我的google-fu ... 因此,我请求你的帮助。
我有一个数据集A:
[{'addr': 'domain77504.com', 'cnt': 7},
{'addr': 'domain48598.com', 'cnt': 6},
{'addr': 'domain14775.com', 'cnt': 6},
{'addr': 'domain58638.com', 'cnt': 5},
{'addr': 'domain62558.com', 'cnt': 5},
{'addr': 'domain4905.com', 'cnt': 5},
{'addr': 'domain8352.com', 'cnt': 5},
{'addr': 'domain71048.com', 'cnt': 5},
{'addr': 'domain18421.com', 'cnt': 5},
{... and so on ...}]
包含50 * number_of_cores元素。 这是一个较大的数据:超过100k域的10M +电子邮件。这就是为什么有像域名这样的域名?域71048.com' :) cnt值是上一步搜索中出现的次数。
在数据集A中查找重复项的最佳方法是什么, 通过他们的' cnt'来重复这些重复。并限制数据集A至50个最常用的元素,由他们新计算的' cnt'下降?
答案 0 :(得分:2)
听起来像是collections.Counter
的工作只需循环遍历数据,更新计数,然后使用.most_common()
方法获得所需的结果。
from collections import Counter
counts = Counter()
for d in data:
k, v = d['addr'], d['cnt']
counts[k] += v
relevant = counts.most_common(50)