计算每个键的唯一值数量的最快方法?

时间:2014-10-29 21:14:13

标签: python dictionary count

我有一个带有两个列名称| familyname的文本文件,其中一个名称可以有不同的族,所以我们有多个具有相同名称和不同族名的行。该文件大约50GB。我想要的是每个姓名的姓氏数量。

目前我创建了一个字典,名称为键,姓氏为值,我打印出每个键和值的长度(作为一组姓氏)。但这不是真正有效和快速的

d = defaultdict(set)


f = open(file, 'r')
for n, line in enumerate(f):
    name,family= line.split('|')
    d[name].add(family)


for name, family in d.iteritems():
    print("%s|%s" % (name, len(family)), file = w)

是否有任何机构对更快获得相同结果的方法有任何建议?

1 个答案:

答案 0 :(得分:0)

另一种方法是使用collections.Counter。这将重复计算相同的行,但它可能会更快:

import collections

with open('input.txt', 'r') as f:
    d = collections.Counter(line.split('|',1)[0] for line in f)

print d.most_common(5)