无模块依赖:从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)
解决方案
问题核心是当前代码用累加数值的方式更新字典,而我们需要追加元素到列表。修正思路:
- 初始化字典时,每个键默认对应空列表(而非0)
- 读取每行数据时,将数值转为整数后,追加到对应键的列表中
- 处理行尾的换行符,避免转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
相关产品推荐
相关产品推荐

