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

将Pandas DataFrame转换为嵌套字典的高效实现方法

Pandas DataFrame转嵌套字典的高效实现方法

问题描述

我有如下格式的Pandas DataFrame:

Path    |    Val 
 A/B           1
 A/C           3 
A/D/E          5
 A/E           7
 F/G           9
 ...          ...

希望将其转换为嵌套字典,层级由Path字段中/分隔的内容决定,预期输出如下:

d =  {'A': 
            {'B': 1, 'C': 3,
             'D': {'E': 5},
             'E': 7},
       'F': {'G': 9}
      }

请问有什么高效的实现方式?

高效实现方法

可以通过迭代DataFrame的每一行,逐步构建嵌套字典来实现,这种方法时间复杂度为O(n)(n为DataFrame行数),效率很高,代码逻辑也清晰:

代码实现

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'Path': ['A/B', 'A/C', 'A/D/E', 'A/E', 'F/G'],
    'Val': [1, 3, 5, 7, 9]
})

def df_to_nested_dict(df):
    result = {}
    for path, val in zip(df['Path'], df['Val']):
        parts = path.strip().split('/')  # 去除路径前后空格,拆分层级
        current = result
        # 遍历除最后一个层级外的所有部分
        for part in parts[:-1]:
            # 如果当前层级不存在,创建空字典
            if part not in current:
                current[part] = {}
            current = current[part]
        # 最后一个层级赋值
        current[parts[-1]] = val
    return result

# 生成嵌套字典
nested_dict = df_to_nested_dict(df)
print(nested_dict)

代码说明

  1. 初始化空字典result作为最终结果容器
  2. 遍历DataFrame的每一行,将路径去除前后空格后拆分为层级列表(比如A/D/E拆分为['A','D','E'])
  3. 从根字典开始,逐层检查并创建子字典,直到到达倒数第二个层级
  4. 将最后一个层级的键对应的值设置为Val列的数值

这种方法无需额外依赖,纯Python+Pandas实现,处理大量数据时也能保持高效——每一行仅遍历一次路径层级,没有冗余操作。如果需要处理重复路径、空路径等特殊场景,可在代码中添加对应判断逻辑,针对当前需求,上述代码已足够简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:15:37