You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:45:33