我正在寻找一个迭代〜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之类的库)。
[创建您的Counter
为
c = Counter(item['country']for item in item_data)
现在已经算出您的国家/地区了。
一种方法是将国家/地区的生成器传递给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)]