如何从含不同列的字典列表生成CSV文件
嘿,这个需求我之前处理过好几次,先给你明确说:你手动写循环生成无重复列名的思路完全没问题,不过其实有更省心的方法,不管是用Python内置模块还是第三方库都能轻松搞定。
方法一:用Python内置的csv模块(无额外依赖)
如果你不想引入额外库,用标准库的csv.DictWriter就能完美解决,它会自动处理字典里缺失的键,对应位置留空。
首先,你自己写的列名去重逻辑是合理的,要是想保持键出现的顺序(比如先出现的列排在前面),可以这么写:
import csv data = [{'A': 'a', 'B': 'b'}, {'A': 'd', 'C': 'c'}] # 收集所有唯一列名,保持出现顺序 columns = [] seen = set() for row in data: for key in row: if key not in seen: seen.add(key) columns.append(key) # 写入CSV with open('output.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.DictWriter(f, fieldnames=columns) writer.writeheader() # 写入列名 writer.writerows(data) # 批量写入行数据
运行后生成的CSV内容就是你想要的:
A,B,C a,b, d,,c
方法二:用pandas(更简洁,适合大数据量)
如果你的项目已经在用pandas,或者数据量比较大,那一行代码就能搞定,连列名去重都不用自己写:
import pandas as pd data = [{'A': 'a', 'B': 'b'}, {'A': 'd', 'C': 'c'}] df = pd.DataFrame(data) df.to_csv('output_pandas.csv', index=False)
pandas会自动识别所有字典里的键作为列名,缺失的值默认填充NaN,写入CSV时会变成空单元格,完全符合你的需求。
关于你之前的疑问
你自己写循环生成无重复键列表是必要的吗?——如果用csv模块的话,是的,因为DictWriter需要明确传入fieldnames参数;但如果用pandas,这一步可以完全省略,库会帮你自动处理所有列名的去重和排序。
内容的提问来源于stack exchange,提问作者spatialpractice
相关产品推荐
相关产品推荐

