如何从带点分隔路径的不规则扁平字典构建层级嵌套字典?
原代码失效的核心原因
写的递归函数完全没实现递归下钻的逻辑:遍历拆分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
相关产品推荐
相关产品推荐

