使用来自 4300 万行文本文件的计数创建字典的更简单方法?



>上下文:我有一个~4400万行的文件。 每个人都是带有美国地址的个人,因此有一个"邮政编码"字段。 文件为 txt,以竖线分隔。

由于尺寸的原因,我不能(至少在我的机器上(使用熊猫进行分析。所以我有一个基本问题是:每个不同的邮政编码有多少条记录(行(? 我采取了以下步骤,但我想知道是否有更快、更 Python 的方式来做到这一点(似乎有,我只是不知道(。

第 1 步:从文件中为 ZIP 值创建一组:

output = set()
with open(filename) as f:
for line in f:
output.add(line.split('|')[8]  # 9th item in the split string is "ZIP" value
zip_list = list(output)  # List is length of 45,292

第 2 步:创建一个"0"列表,长度与第一个列表相同:

zero_zip = [0]*len(zip_list)

第 3 步:从这两个列表中创建一个字典(全为零(:

zip_dict = dict(zip(zip_list, zero_zip))  

步骤4:最后,我再次浏览了该文件,这次更新了我刚刚创建的字典:

with open(filename) as f:
next(f)  # skip first line, which contains headers
for line in f:
zip_dict[line.split('|')[8]] +=1

我得到了最终结果,但想知道是否有更简单的方法。 谢谢大家。

创建zip_dict可以替换为defaultdict。如果你可以运行文件中的每个行,你不需要做两次,你可以保持一个运行计数。

from collections import defaultdict
d = defaultdict(int)
with open(filename) as f:
for line in f:
parts = line.split('|')
d[parts[8]] += 1

使用内置的 Counter 类这很简单。

from collections import Counter
with open(filename) as f:
c = Counter(line.split('|')[8] for line in f)
print(c)

最新更新