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

如何将带斜杠路径的字典转换为嵌套字典?代码未生效

斜杠分隔键转嵌套字典的修复方案

问题原因分析

你原代码的核心问题在于使用current_dict.get(new_key, {})处理层级键:当目标键不存在时,get方法会返回一个新的空字典,但这个临时字典并没有被添加到上层字典中。后续的赋值操作都只在这个临时字典里进行,不会影响最终的result_dict,因此只有最顶层直接赋值的BUILDING_C和BUILDING_D被保留下来。

修正后的代码

使用dict.setdefault()方法替代get(),该方法会在键不存在时自动将键和默认值添加到当前字典,同时返回这个值,确保后续操作能正确关联到嵌套的层级:

start_dict = {
    "/BUILDING_A/FLOOR_3/ROOM_12": 3, 
    "/BUILDING_A/FLOOR_3/ROOM_15": 4,
    "/BUILDING_A/FLOOR_4/ROOM_3": 2,
    "/BUILDING_B/FLOOR_1": 5,
    "/BUILDING_B/FLOOR_2": 3,
    "/BUILDING_C": 25,
    "/BUILDING_D": 32,
}

result_dict = {}
for key, value in start_dict.items():
    # 处理键:去除开头斜杠并按斜杠分割成层级列表
    new_keys = key.lstrip("/").split("/")
    current_dict = result_dict
    # 遍历除最后一个键外的所有层级,创建嵌套结构
    for new_key in new_keys[:-1]:
        current_dict = current_dict.setdefault(new_key, {})
    # 给最后一层键赋值
    current_dict[new_keys[-1]] = value

# 格式化打印结果验证
import json
print(json.dumps(result_dict, indent=4))

代码说明

  1. 键处理:key.lstrip("/").split("/")把带斜杠的路径键转换成层级列表,例如"/BUILDING_A/FLOOR_3/ROOM_12"会被处理为["BUILDING_A", "FLOOR_3", "ROOM_12"]。
  2. 层级构建:setdefault(new_key, {})确保每一层级的键都存在,不存在则自动创建空字典并关联到上层,这样current_dict始终指向当前需要操作的嵌套字典层级。
  3. 最终赋值:遍历完层级后,给最后一个键设置对应的值,完成整个路径的嵌套赋值。

运行代码后会得到你预期的嵌套字典结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:27:12