我有一个带有两个列名称| 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)
是否有任何机构对更快获得相同结果的方法有任何建议?
答案 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)