一种更简单的方法来创建具有4,300万行文本文件计数的字典?

问题描述 投票:2回答:2

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

由于大小,我不能(至少在我的机器上)无法使用熊猫进行分析。因此,我有一个基本问题:每个不同的邮政编码有几条记录(行)?我采取了以下步骤,但是我想知道是否有更快,更Pythonic的方法来执行此操作(似乎有,我只是不知道)。

步骤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

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

python python-3.x dataset analysis
2个回答
2
投票

创建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

0
投票

使用内置的Counter类很简单。

from collections import Counter

with open(filename) as f:
    c = Counter(line.split('|')[8] for line in f)
print(c)
© www.soinside.com 2019 - 2024. All rights reserved.