如何将值为不等长列表的字典转换为CSV文件?
解决不等长列表字典转CSV的问题
你已经找对了转置的方向,但遇到了不等长列表的小坑——默认的转置方法会在最短的列耗尽后就停止,导致长列表后面的元素直接丢失。别担心,我们只需要先把短列表补全,再转置写入CSV就能搞定。
完整解决方案代码
import csv dict_data = { "Data 1": ["cool", "fantastic"], "Data 2": ["spam", "hello", "howdy", "foo"], "Data 3": ["good morning"], } # 提取表头和对应列数据(Python 3.7+字典默认保留插入顺序) headers = list(dict_data.keys()) columns = list(dict_data.values()) # 找到最长列的长度,用来补全短列表 max_col_length = max(len(col) for col in columns) # 给短列表补上空字符串,让所有列长度一致 padded_columns = [col + [""] * (max_col_length - len(col)) for col in columns] # 把列数据转置为行数据 transposed_rows = list(zip(*padded_columns)) # 写入CSV文件 with open('result.csv', 'w', newline='') as out_file: writer = csv.writer(out_file, dialect='excel') writer.writerow(headers) # 先写表头 writer.writerows(transposed_rows) # 批量写入所有行
代码细节说明
- 表头与列数据提取:直接把字典的键作为CSV表头,值作为每一列的内容。如果你的Python版本低于3.7,记得用
collections.OrderedDict来保证键的顺序。 - 补全短列表:找到所有列里最长的长度,给短列表后面补上对应数量的空字符串,这样转置时就不会漏掉长列表的后续元素。
- 转置数据:用
zip(*padded_columns)快速把列转成行,它会自动按位置配对每个列的元素。 - 写入CSV:用
csv.writer先写入表头,再批量写入转置后的行,生成的CSV用Excel打开时,空字符串会显示为空单元格,完全符合你想要的格式。
生成的CSV内容如下:
Data 1,Data 2,Data 3
cool,spam,good morning
fantastic,hello,
,howdy,
,foo,
内容的提问来源于stack exchange,提问作者Sherluck08
相关产品推荐
相关产品推荐

