如何统计CSV文件中每年出现次数并生成对应字典
问题解决:统计CSV中各年份的出现次数
原代码问题分析
你当前代码的核心错误是使用了全局的count变量——每次循环累加的是所有行的总数,然后直接把这个值赋值给字典里的年份键。这会导致每个年份最终的数值是到该行为止的总行数,而非该年份的实际出现次数。比如重复出现的年份会被覆盖成当前累计行数,完全达不到按年份统计的目的。
修正方案1:手动维护字典计数
import csv def incidents_per_year(): year_counts = {} # 不要用`dict`作为变量名,它是Python内置类型 with open("saved_data.csv") as f: reader = csv.reader(f) next(reader) # 跳过表头行 for row in reader: year = row[0] # 针对当前年份单独计数 if year in year_counts: year_counts[year] += 1 else: year_counts[year] = 1 return year_counts
这段代码每次循环只处理当前年份:如果年份已在字典中,就把对应计数加1;如果是第一次出现,就初始化为1,这样就能准确统计每个年份的出现次数。
修正方案2:使用collections.Counter(更简洁)
Python标准库的collections.Counter专门用于元素计数,能大幅简化代码:
import csv from collections import Counter def incidents_per_year(): with open("saved_data.csv") as f: reader = csv.reader(f) next(reader) # 跳过表头 # 提取所有年份到列表,再用Counter统计 year_list = [row[0] for row in reader] year_counts = Counter(year_list) # 若需要纯字典格式,可转换为dict(year_counts) return dict(year_counts)
Counter会自动遍历列表统计每个元素的出现次数,最终返回的对象可以直接当作字典使用,也能通过dict()转为普通字典。
内容的提问来源于stack exchange,提问作者P Mastr
相关产品推荐
相关产品推荐

