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

如何从带点分隔路径的不规则扁平字典构建层级嵌套字典?

原代码失效的核心原因

写的递归函数完全没实现递归下钻的逻辑:遍历拆分key得到的每一段路径时,始终把最外层的字典作为操作对象,每次都把当前遍历到的路径段和最终的value直接塞到最外层字典上,既没有逐层进入嵌套结构,还会出现后续路径段覆盖前面节点的问题,根本生成不了嵌套结构。另外用正则拆分key的方式没必要,直接按点切割更高效直观。

可通用实现方案

核心逻辑是顺着key的路径逐层下钻构建嵌套结构,适配任意深度、任意嵌套差异的扁平字典,不需要手动定义层级:

  • 遍历每个扁平键值对时,先按.把完整key拆成路径段列表
  • 维护一个指针,初始指向最终的根嵌套字典
  • 逐段遍历路径,非最后一段路径就确保当前指针指向的层级下存在对应键的空字典,再把指针移动到这个内层字典
  • 走到最后一段路径时,把实际值赋给当前层级的对应键,不额外创建空结构
def convert_flat_to_nested(flat_data):
    nested_dict = {}
    for raw_key, val in flat_data.items():
        path_nodes = raw_key.split(".")
        current_node = nested_dict
        # 逐层构建中间嵌套层
        for depth_node in path_nodes[:-1]:
            if depth_node not in current_node:
                current_node[depth_node] = {}
            current_node = current_node[depth_node]
        # 最后一层直接赋值目标值
        current_node[path_nodes[-1]] = val
    return nested_dict

# 测试验证
test_data = {
    "active_screen": "artboard_1",
    "artboard_1.content1.grd_x": 0,
    "artboard_2.content2.content3.grd_y": 0,
    "artboard_2.content2.content3.grd_x": 0
}
output = convert_flat_to_nested(test_data)
方案优势
  • 不依赖第三方库,纯原生字典实现,处理大规模数据时没有额外性能损耗
  • 自动适配任意嵌套深度,哪怕不同条目对应的嵌套路径差好几层也能正常处理
  • 不会生成多余的空字典结构,最终输出和目标结构完全对齐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 19:45:01