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

如何基于CSV文件生成键为院系、值为对应数量的字典

问题原因

你的原有代码存在以下逻辑错误:

  • 提前硬编码院系列表既容易出现拼写错误(比如你写的buiseness、大小写不匹配的smart IOT),也无法适配CSV中实际出现的院系值
  • 内层遍历逻辑错误:每读取一行CSV,就给所有预设院系的列表追加一次当前行的院系值,完全没有做匹配判断
  • 最终赋值逻辑错误:直接将所有院系的统计值设为了预设列表的总长度,和实际出现次数完全无关

正确实现

方案1:统计所有出现过的院系(最常用,无需提前预设列表)

使用Python标准库collections.Counter可以非常便捷地完成统计:

import csv
from collections import Counter

with open('fake_student_records.csv', mode='r', encoding='utf-8') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    # 直接提取所有行的department字段交给Counter统计
    dept_count = Counter(row['department'].strip() for row in csv_reader)

# 转成普通字典(如果需要的话,Counter本身也是字典子类)
print(dict(dept_count))

如果需要忽略大小写、统一输出格式(比如全小写/首字母大写),可以修改提取逻辑:

# 比如统一转全小写统计
dept_count = Counter(row['department'].strip().lower() for row in csv_reader)

方案2:仅统计你预设的names列表中的院系

如果确实需要限定统计范围为你提前定义的院系,可以用如下逻辑:

import csv

names = ['japanese', 'psychology', 'economics', 'business', 'biology', 'medical', 'software', 'smart iot', 'big data', 'electronics', 'contents IT']
# 初始化统计字典
dept_count = {name: 0 for name in names}

with open('fake_student_records.csv', mode='r', encoding='utf-8') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for row in csv_reader:
        current_dept = row['department'].strip().lower()
        # 匹配到预设列表中的院系再计数+1
        if current_dept in dept_count:
            dept_count[current_dept] += 1

print(dept_count)

内容的提问来源于stack exchange,提问作者user17143278

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:39:00