如何在生成器内部增加值

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

我正在寻找一个迭代〜5GB文件的生成器中的以下操作:

from collections import Counter
c=Counter()
lines_as_list = (line.strip().split('|') for line in open('file-00000-of-00001.csv'))
header = next(lines_as_list)
item_data = (dict(zip(header, data)) for data in lines_as_list)
totals_per_country = (c[item['country']]+=1 for item in item_data)

这当然由于尝试在理解范围内分配值而失败。在生成器中执行此操作的建议方法是什么(不使用for循环或诸如pandas之类的库)。

python python-3.x generator yield
2个回答
1
投票

[创建您的Counter

c = Counter(item['country']for item in item_data)

现在已经算出您的国家/地区了。


0
投票

一种方法是将国家/地区的生成器传递给Counter,因为这需要反复进行。例如:

>>> countries = (item['country'] for item in item_data)
>>> totals_per_country = Counter(countries) # not a generator, evaluates immediately
>>> totals_per_country.most_common(5)
[('US', 299072), ('CA', 183927), ('GB', 150242), ('AU', 131295), ('DE', 100611)]
© www.soinside.com 2019 - 2024. All rights reserved.