如何使用Python将嵌套字典写入指定格式的CSV文件?
解决方案
直接用Python内置的csv模块就能实现你要的CSV格式,以下是完整代码:
import csv # 你的嵌套字典数据 daily_data = {'09-04-2018': {1: 11, 2: 5, 3: 1, 4: 1, 5: 0}, '10-04-2018': {1: 5, 2: 1, 3: 1, 4: 1, 5: 0}} # 获取所有count值并排序(保证输出顺序是1-5) count_keys = sorted(next(iter(daily_data.values())).keys()) # 提取所有日期作为CSV的列名 date_columns = list(daily_data.keys()) # 写入CSV文件 with open('counts_by_date.csv', 'w', newline='') as csv_file: writer = csv.writer(csv_file) # 写入表头:count + 所有日期 writer.writerow(['count'] + date_columns) # 逐行写入每个count对应的数据 for count in count_keys: # 收集每个日期下该count的值,若日期无此count则默认填0(增强健壮性) row_data = [count] + [daily_data[date].get(count, 0) for date in date_columns] writer.writerow(row_data)
代码解释
- 导入模块:用Python标准库的
csv模块,不需要额外安装第三方包,兼容性拉满。 - 提取关键数据:
count_keys:取第一个日期对应的内层字典的键,排序后保证输出的count是1到5的顺序;如果你的数据存在不同日期有不同count键的情况,可以改成sorted({k for d in daily_data.values() for k in d.keys()}),这样能获取所有唯一的count键。date_columns:直接提取外层字典的键作为CSV的列名,保持你原始数据的日期顺序。
- 写入CSV:
- 用
with语句打开文件,自动处理文件关闭,避免资源泄漏。 - 先写入表头
['count'] + date_columns,对应你要的第一行格式。 - 循环每个count值,用列表推导式收集每个日期下的对应数值,
get(count, 0)能处理某个日期缺失该count的情况,自动填充0,避免报错。
- 用
运行这段代码后,生成的CSV文件内容完全符合你的要求:
count,09-04-2018,10-04-2018 1,11,5 2,5,1 3,1,1 4,1,1 5,0,0
内容的提问来源于stack exchange,提问作者Vikash Singh
相关产品推荐
相关产品推荐

