Python使用openpyxl实现嵌套字典提取数据写入Excel的方法
实现思路
- 第一步:导入
openpyxl库,初始化工作簿对象,可选择性删除默认生成的Sheet工作表,避免出现多余空白表 - 第二步:遍历外层嵌套字典的键值对,外层键直接作为工作表名称调用
create_sheet方法创建对应工作表 - 第三步:取当前工作表对应内层字典的键列表作为表头,按顺序写入第1行的每一列
- 第四步:取所有表头对应列表的最大长度作为数据行数,逐行遍历索引,将同一索引下所有表头对应的列表元素取出,依次写入当前行的对应列即可,遇到长度不足的列表可默认填充空值避免报错
完整实现代码
from openpyxl import Workbook # 示例嵌套字典 nested_dict = { 'dict_1': {'key1': ['data1', 'data2', 'data3'], 'key2': ['1', '2', '3'], 'key3': ['value1', 'value2', 'value3']}, 'dict_2': {'key1': ['data1', 'data2', 'data3'], 'key2': ['1', '2', '3'], 'key3': ['value1', 'value2', 'value3']} } # 初始化工作簿 wb = Workbook() # 删除默认生成的空白Sheet表 if 'Sheet' in wb.sheetnames: wb.remove(wb['Sheet']) # 遍历外层嵌套字典 for sheet_name, inner_dict in nested_dict.items(): # 创建工作表 ws = wb.create_sheet(title=sheet_name) # 提取表头 headers = list(inner_dict.keys()) # 写入表头(第1行) for col_idx, header in enumerate(headers, start=1): ws.cell(row=1, column=col_idx, value=header) # 获取所有数据列表的最大长度,避免不同列长度不一致报错 max_row_len = max([len(val_list) for val_list in inner_dict.values()]) # 逐行写入数据,从第2行开始 for row_idx in range(2, max_row_len + 2): # 当前行对应的列表索引是 row_idx - 2(因为row_idx从2开始,索引从0开始) data_idx = row_idx - 2 for col_idx, header in enumerate(headers, start=1): val_list = inner_dict[header] # 如果当前索引在列表长度范围内就取值,否则填空 cell_val = val_list[data_idx] if data_idx < len(val_list) else '' ws.cell(row=row_idx, column=col_idx, value=cell_val) # 保存文件 wb.save('test.xlsx')
注意事项
- 代码兼容内层字典不同key对应列表长度不一致的场景,短列表末尾会自动填充空值
- 工作表名称如果包含Excel不支持的特殊字符(如
/\?*[])需要提前做替换处理,避免创建工作表时报错
内容的提问来源于stack exchange,提问作者user11464178
相关产品推荐
相关产品推荐

