读取CSV为字典后逐行追加至现有字典仅存当前行,求排查
问题解决:CSV字典行无法追加到buffer的原因及方案
为什么buffer |= row和buffer.update(row)没效果
字典的核心特性是键的唯一性,当你用这两个方法时,若row里的键和buffer已有的键重复,新值会直接覆盖旧值。而CSV按字典读取时,每行的键都是表头字段,所以每次循环都是用新行的字段值覆盖buffer里的同键值,自然只会保留最后一行的数据。
正确实现方式
根据需求分两种场景处理:
场景1:保存所有行的字典(最常用)
把buffer定义为列表而非字典,每次循环将行字典追加到列表中:
import csv buffer = [] with open('your_file.csv', 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: buffer.append(row) # 此时buffer是包含所有行字典的列表 print(buffer)
场景2:将同键的多行值合并为列表
如果需要把每行同键的值合并到buffer的对应键下,要手动遍历处理每个键:
import csv buffer = {} with open('your_file.csv', 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: for key, value in row.items(): if key not in buffer: buffer[key] = [] buffer[key].append(value) # 此时buffer的每个键对应一个包含所有行该字段值的列表 print(buffer)
内容的提问来源于stack exchange,提问作者abdul
相关产品推荐
相关产品推荐

