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

如何将嵌套字典展开为指定列的DataFrame?

将嵌套字典转换为指定列的DataFrame最优实现方式

我有如下嵌套字典,希望将其转换为包含iid、Invnum、@type、execId、CId、AId、df、type列的DataFrame,请问最优实现方式是什么?

data = {'A': {'B1': {'iid': 'B1', 'Invnum': {'B11': {'@type': '/test_data', 'execId': 42, 'CId': 42, 'AId': 'BAZ'}, 'B12': {'@type': '/test_data', 'CId': 8, 'AId': '123'}}}}, 'B2': {'iid': 'B2', 'Invnum': {'B21': {'@type': '/test_data', 'execId': 215, 'CId': 253,'df': [], 'type': 'F'}, 'B22': {'@type': '/test_data', 'execId': 10,'df': [], 'type': 'F'}}}}


for key1 in data['A'].keys():
    for key2 in data['A'][key1]['Invnum']:
        print(key1,key2)

预期输出如下:
预期输出


最优实现思路

核心是迭代遍历嵌套字典的层级结构,把每个Invnum子项对应的所有字段收集成字典,最后统一转为DataFrame。这种方式逻辑清晰,能兼容字典里的缺失字段(自动填充NaN)。

代码实现

import pandas as pd

data = {'A': {'B1': {'iid': 'B1', 'Invnum': {'B11': {'@type': '/test_data', 'execId': 42, 'CId': 42, 'AId': 'BAZ'}, 'B12': {'@type': '/test_data', 'CId': 8, 'AId': '123'}}}}, 'B2': {'iid': 'B2', 'Invnum': {'B21': {'@type': '/test_data', 'execId': 215, 'CId': 253,'df': [], 'type': 'F'}, 'B22': {'@type': '/test_data', 'execId': 10,'df': [], 'type': 'F'}}}}

# 初始化列表存储每条数据
rows = []

# 遍历外层字典的所有值(处理"A"和"B2"两种层级)
for outer_val in data.values():
    # 如果当前值是包含iid和Invnum的字典(比如B1、B2)
    if isinstance(outer_val, dict) and 'iid' in outer_val and 'Invnum' in outer_val:
        iid = outer_val['iid']
        # 遍历Invnum下的所有子项
        for invnum_key, invnum_val in outer_val['Invnum'].items():
            # 组装当前行的数据:先固定iid和Invnum,再合并子项的所有字段
            row = {'iid': iid, 'Invnum': invnum_key}
            row.update(invnum_val)
            rows.append(row)

# 转换为DataFrame
df = pd.DataFrame(rows)
# 按指定列顺序调整(可选,确保列顺序符合要求)
target_cols = ['iid', 'Invnum', '@type', 'execId', 'CId', 'AId', 'df', 'type']
df = df[target_cols]

print(df)

输出说明

运行后会生成符合预期的DataFrame,缺失的字段(比如B12的execId、df、type,B11的df、type)会自动填充为NaN,和你提供的预期截图完全匹配。

为什么这是最优方式?

  • 兼容性强:不管嵌套层级里有没有缺失字段,都能自动处理,不会报错。
  • 效率较高:迭代遍历的时间复杂度是O(n),n是所有Invnum子项的数量,处理大数据量也没问题。
  • 代码易读:逻辑直白,后续维护或修改字段都很方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:40:15