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

无模块依赖:从CSV构建三键多值字典的实现方法

无依赖实现CSV数据提取为字典列表

需要从CSV文件中提取每行数据,将数值按morning、midday、night三个分类存入字典,每个分类对应整数列表(用于后续最大值、最小值、平均值等统计运算)。限制条件:不能使用numpy或csv模块,必须无依赖实现。

当前代码的问题:
现有代码会对每个分类的数值求和,得到的是键对应累加值的字典(如{'morning': 2097, 'midday': 1240, 'night': 1533}),不符合预期。预期结构应为每个键对应整数列表:

{
    'morning': [5, 5, 10, 17, 20, 21],
    'midday': [10, 20, 25, 15, 8, 3],
    'night': [3, 5, 2, 7, 15, 29]
}

当前代码:

time_list = []
time_dict = {}

with open('stats.csv', 'r') as data_file:
    headers = data_file.readline()

    for line in data_file:
        Time, VS = line.split(',')
        time_list.append(int(VS))
        time_dict[Time] = time_dict.get(Time, 0) + int(VS)

解决方案

问题核心是当前代码用累加数值的方式更新字典,而我们需要追加元素到列表。修正思路:

  1. 初始化字典时,每个键默认对应空列表(而非0)
  2. 读取每行数据时,将数值转为整数后,追加到对应键的列表中
  3. 处理行尾的换行符,避免转int报错

修正后的代码:

time_dict = {}

with open('stats.csv', 'r') as data_file:
    # 跳过表头行
    data_file.readline()
    
    for line in data_file:
        # 分割行数据,同时去除首尾空白(包括换行符)
        time_period, value_str = line.strip().split(',')
        # 转换为整数
        value = int(value_str)
        # 若键不存在则初始化空列表,再追加当前值
        time_dict.setdefault(time_period, []).append(value)

代码说明

  • line.strip():去除行首尾的空白字符(包括换行符),避免分割后value_str带换行符导致转int失败
  • dict.setdefault(key, default):如果键不存在,就设置为默认值(这里是空列表),然后返回该值,直接调用append()追加元素
  • 若后续不需要单独存储所有数值,可删除原代码中的time_list

验证结果:
运行后time_dict的结构将完全符合预期,每个时间段对应整数列表,可直接用于后续统计运算(如max(time_dict['morning'])、sum(time_dict['midday'])/len(time_dict['midday'])等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:45:41