如何将含层级数据的Excel转换为嵌套Python字典?
Excel转带层级结构的Python字典解决方案
一、优化Excel格式(简化代码的核心)
推荐用点分隔符表示层级键名,这是实现通用转换最便捷的格式,示例如下:
| prefix | status | vlan.vid |
|---|---|---|
| 10.0.1.0/28 | container | 200 |
如果需要更直观的层级展示,也可以用缩进列(但代码逻辑稍复杂):
| prefix | status | vlan | vid |
|---|---|---|---|
| 10.0.1.0/28 | container | 200 |
二、Python代码实现
针对点分隔键名的Excel(推荐方案)
使用pandas读取数据,将扁平的带点键转换为嵌套字典:
import pandas as pd import json def build_nested_dict(row): nested = {} for key, val in row.items(): if pd.isna(val): continue # 拆分层级键 key_parts = key.split('.') current_level = nested # 逐层创建嵌套字典 for part in key_parts[:-1]: if part not in current_level: current_level[part] = {} current_level = current_level[part] # 设置最终值 current_level[key_parts[-1]] = val return nested # 读取Excel文件 df = pd.read_excel('your_excel_file.xlsx') # 组装成目标结构 final_result = [ { "ipam.prefixes": [ {row['prefix']: build_nested_dict(row)} for _, row in df.iterrows() ] } ] # 格式化输出结果 print(json.dumps(final_result, indent=2))
代码效果
运行后会生成你需要的结构:
[ { "ipam.prefixes": [ { "10.0.1.0/28": { "prefix": "10.0.1.0/28", "status": "container", "vlan": { "vid": 200 } } } ] } ]
扩展说明
- 支持任意深度的层级键(比如
a.b.c.d),代码无需修改即可自动处理 - 空值会被自动跳过,避免生成无效的嵌套结构
内容的提问来源于stack exchange,提问作者chun xu
相关产品推荐
相关产品推荐

