You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:24:09