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

如何将指定字典数据转换为Pandas DataFrame并导出至Excel?

解决方案:将字典转换为Pandas DataFrame并导出至Excel

完全可以实现你的需求,以下是具体步骤和代码:

1. 导入依赖库

首先导入pandas,如果需要设置Excel单元格合并格式,额外导入openpyxl相关模块:

import pandas as pd
# 如需合并单元格格式,导入以下库
from openpyxl.styles import Alignment
from openpyxl import load_workbook

2. 定义目标字典

使用你提供的字典数据:

dic = {
'10.109.0.0/16': ['10.109.0.0/19', '10.109.32.0/19', '10.109.64.0/19', '10.109.96.0/19', '10.109.128.0/19', '10.109.160.0/19', '10.109.192.0/19', '10.109.224.0/19'],
'10.111.0.0/16': [
    '10.111.0.0/24',
    '10.111.0.0/19',
    '10.111.1.0/24',
    '10.111.32.0/19',
    '10.111.48.0/24',
    '10.111.64.0/20',
    '10.111.189.0/24',
    '10.111.190.0/24',
    '10.111.192.0/19',
    '10.111.224.0/19'
]   
}

3. 生成DataFrame

方式一:数据规范型(每个子网对应完整Aggregate值)

这种结构便于后续数据分析,每个子网行都保留对应的聚合网段:

# 构造数据列表
data = []
for aggregate, subnets in dic.items():
    for subnet in subnets:
        data.append({'Aggregate': aggregate, 'Subnet': subnet})

# 创建DataFrame
df = pd.DataFrame(data)

方式二:匹配示例显示型(仅首行显示Aggregate)

如果需要和你提供的示例格式一致,仅每个聚合网段组的第一行显示Aggregate值,其余行留空:

# 构造数据列表
data = []
for aggregate, subnets in dic.items():
    for idx, subnet in enumerate(subnets):
        if idx == 0:
            data.append({'Aggregate': aggregate, 'Subnet': subnet})
        else:
            data.append({'Aggregate': '', 'Subnet': subnet})

# 创建DataFrame
df = pd.DataFrame(data)

4. 导出至Excel文件

基础导出(无格式)

直接将DataFrame导出为Excel文件:

df.to_excel('subnet_list.xlsx', index=False)

带合并单元格的格式导出(匹配示例样式)

如果使用方式二生成的DataFrame,可以进一步设置Excel单元格合并,让显示效果和示例一致:

# 导出DataFrame到Excel(指定openpyxl引擎)
df.to_excel('subnet_list.xlsx', index=False, engine='openpyxl')

# 加载工作簿并设置格式
wb = load_workbook('subnet_list.xlsx')
ws = wb.active

# 遍历Aggregate列,合并空值对应的单元格
current_aggregate = None
start_row = 2
for row in range(2, ws.max_row + 1):
    cell_value = ws[f'A{row}'].value
    if cell_value != '':
        if current_aggregate is not None and row > start_row:
            ws.merge_cells(f'A{start_row}:A{row-1}')
            ws[f'A{start_row}'].alignment = Alignment(horizontal='left', vertical='center')
        current_aggregate = cell_value
        start_row = row
# 处理最后一组数据
if start_row < ws.max_row:
    ws.merge_cells(f'A{start_row}:A{ws.max_row}')
    ws[f'A{start_row}'].alignment = Alignment(horizontal='left', vertical='center')

# 保存设置后的工作簿
wb.save('subnet_list.xlsx')

内容的提问来源于stack exchange,提问作者ver_roh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:22:50