如何用Python内置函数将CSV转为指定格式的字典列表?
解决CSV转特定格式字典列表的问题
你需要将CSV文件转换为[{col1: [values]}, {col2: [values]}, ...]格式的字典列表,但当前代码生成的是每个字段对应一个单键字典的列表,和预期不符。
问题分析
现有代码的问题在于:
- 循环每一行数据时,又嵌套循环每个表头,每次都新建一个单键字典并添加到结果列表
- 最终得到的是所有字段的零散单键字典,而不是按列聚合的列表
修正后的代码
result = [] with open(filename, 'r') as f: # 读取表头并处理 headers = f.readline().strip().split(',') # 初始化字典:键为表头,值为对应列的空列表 column_dict = {header: [] for header in headers} # 遍历每一行数据,填充各列的列表 for line in f: line_values = line.strip().split(',') # 匹配表头和对应的值,添加到列表 for header, value in zip(headers, line_values): column_dict[header].append(value) # 将列字典转换为要求的列表格式:每个元素是单个键值对的字典 result = [{key: value} for key, value in column_dict.items()]
代码说明
- 初始化列字典:先创建一个以表头为键、空列表为值的字典,用于收集每一列的所有数据
- 填充数据:逐行读取CSV内容,拆分后将每个值对应添加到表头的列表中,完成按列聚合
- 转换格式:通过列表推导式,把聚合好的列字典拆分为单个键值对的字典列表,完全符合预期格式
示例效果
假设CSV内容为:
col1,col2,col3 16,3779,60.5 17,3800,61.0
运行后result的结果为:
[{'col1': ['16', '17']}, {'col2': ['3779', '3800']}, {'col3': ['60.5', '61.0']}]
内容的提问来源于stack exchange,提问作者Amazing-Grace Umoren
相关产品推荐
相关产品推荐

