如何将for循环生成的多个同键字典合并为单个字典以导出CSV
解决方案
核心逻辑说明
你现有代码的问题是每次循环都会生成仅包含单条数据的新字典,使用update方法只会覆盖已有键的值,不会把新数据追加到对应列表中。你需要提前初始化合并字典,每个键对应空列表,循环时把计算得到的每条数据追加到对应列表即可。
修正后的完整代码
# 第一步:提前初始化合并用字典,所有键对应空列表 merged_dict = { 'Power': [], 'Length': [], 'Duration': [], 'Freq': [], 'Start Times': [] } for salaries, match in matching_salaries_non_employees.items(): # 计算各字段值(注意修正原有变量名大小写不统一的问题) power_match = match['Status']['Power'] + ": " + salaries length_match = match['Status']['Length'] + ": " + match['Break']['Temp'] duration_match = f"{match['Status']['duration']}: {match['Break']['duration']}" freq_match = f"{match['Status']['freq']}: {match['Break']['freq']}" start_times = f"{match['Status']['start time']}: {match['Break']['start time']}" # 将当前条目的各字段值追加到合并字典对应列表 merged_dict['Power'].append(power_match) merged_dict['Length'].append(length_match) merged_dict['Duration'].append(duration_match) merged_dict['Freq'].append(freq_match) merged_dict['Start Times'].append(start_times)
运行后得到的merged_dict就是你需要的合并后字典,对应你给出的两条示例数据,输出格式为:
{ 'Power': ['high: high', 'med-high: med-high'], 'Length': ['Long: Short', 'Long: Long'], 'Duration': ['2.22: 1.01', '1.16: 0.81'], 'Freq': ['0.081229: 0.079503', '0.0988: 0.565'], 'Start Times': ['10.10.08: 11.09.16', '17.08.98: 31:01:03'] }
保存为CSV的两种方法
方法1:用pandas实现(代码更简洁)
import pandas as pd df = pd.DataFrame(merged_dict) # index=False表示不保存默认行号,utf-8-sig编码避免中文乱码 df.to_csv('匹配结果.csv', index=False, encoding='utf-8-sig')
方法2:用Python内置csv模块实现(无需额外安装依赖)
import csv with open('匹配结果.csv', 'w', newline='', encoding='utf-8-sig') as f: # 指定表头为合并字典的键 writer = csv.DictWriter(f, fieldnames=merged_dict.keys()) # 写入表头 writer.writeheader() # 逐行写入数据 for row in zip(*merged_dict.values()): writer.writerow(dict(zip(merged_dict.keys(), row)))
内容的提问来源于stack exchange,提问作者emilyxyzzyx
相关产品推荐
相关产品推荐

