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

如何将键为‘起点.终点’格式的Python字典转换为嵌套字典?

解决方案:将扁平点分隔键字典转为嵌套字典

嘿,我知道你遇到的这个问题——之前我也踩过类似的坑!你说的键被覆盖,本质上是因为每次处理同一个起始节点的新路径时,没有先检查它已经存在于结果字典里,直接新建子字典把之前的内容冲掉了。下面给你两种靠谱的解决方案:

方法一:基础循环(无需额外库)

这种方法逻辑清晰,适合新手理解,核心就是先判断起始节点是否存在,不存在再创建子字典,避免覆盖:

original_dict = {'A.B': 7, 'C.D': 5, 'A.D': 34}
nested_dict = {}

for key, count in original_dict.items():
    # 拆分路径键为出发节点和目的地节点
    start_node, end_node = key.split('.')
    # 检查出发节点是否已在结果字典中,没有则创建空字典
    if start_node not in nested_dict:
        nested_dict[start_node] = {}
    # 将目的地和对应次数添加到子字典中
    nested_dict[start_node][end_node] = count

print(nested_dict)
# 输出: {'A': {'B': 7, 'D': 34}, 'C': {'D': 5}}

方法二:用collections.defaultdict简化代码

如果想让代码更简洁,可以用Python标准库的defaultdict,它会自动为不存在的起始节点创建空字典,省去手动判断的步骤:

from collections import defaultdict

original_dict = {'A.B': 7, 'C.D': 5, 'A.D': 34}
# 初始化defaultdict,值类型为字典
nested_dict = defaultdict(dict)

for key, count in original_dict.items():
    start_node, end_node = key.split('.')
    nested_dict[start_node][end_node] = count

# 若需要转为普通字典(而非defaultdict类型),可以用dict()转换
nested_dict = dict(nested_dict)
print(nested_dict)

扩展说明

如果你的路径键有更深层级(比如'A.B.C'这种三层结构),可以用递归的方式处理,但针对你当前的两层需求,上面两种方法完全足够啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 14:07:31