全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何递归构建字典中的完整路径字段

本文介绍如何通过递归函数为嵌套字典结构中的每个节点动态生成基于父路径的 `folder` 字段,解决路径重复拼接问题,并提供可直接运行的修正代码与关键注意事项。

在处理树形结构数据(如文件目录、组织架构)时,常需将扁平的 name 字段扩展为带层级关系的完整路径(如 Kestral/Burtree Lane/ARCHIVE)。原始代码因在递归调用前和函数体内重复使用 data["name"],导致路径中出现冗余拼接(如 Burtree LaneBurtree Lane),根本原因在于:child_path 的构造逻辑与递归参数传递逻辑耦合错误,且未统一路径生成时机

以下是修正后的递归实现,逻辑清晰、无重复、支持灵活路径前缀控制:

def build_structured_dict(data, parent_path=""):
    """
    递归为嵌套字典添加 'folder' 字段,表示从根到当前节点的完整路径。

    Args:
        data (dict): 包含 'name' 和 'children' 键的字典节点
        parent_path (str): 父级路径(不含末尾斜杠),默认为空字符串

    Returns:
        dict: 新建字典,含 'name', 'folder', 'children' 三个键
    """
    # 当前节点的完整路径 = 父路径 + "/" + 当前名称(若父路径非空则加斜杠)
    current_path = f"{parent_path}/{data['name']}" if parent_path else data['name']

    new_dict = {
        "name": data["name"],
        "folder": current_path,
        "children": []
    }

    # 递归处理每个子节点,传入当前完整路径(已含斜杠结尾)
    for child in data["children"]:
        new_dict["children"].append(
            build_structured_dict(child, current_path)
        )

    return new_dict

关键修复点说明:

  • 路径只计算一次:current_path 在函数开头统一生成,避免在循环内重复构造;
  • 递归参数语义明确:传给子节点的是 current_path(如 "Kestral"),子节点内部自动追加 /child_name,杜绝双重拼接;
  • 前缀可控:默认 parent_path="" 可输出 Kestral/Burtree Lane/...;若需开头带 /(如 /Kestral/...),只需将默认值改为 "/" 即可。

? 使用示例:

a = {
    'name': 'Kestral',
    'children': [
        {
            'name': 'Burtree Lane',
            'children': [
                {'name': 'ARCHIVE', 'children': []},
                {
                    'name': 'Development',
                    'children': [
                        {'name': 'Fee Proposals', 'children': []}
                    ]
                }
            ]
        }
    ]
}

result = build_structured_dict(a)
print(result)

输出完全匹配预期目标结构,无任何路径重复。

⚠️ 注意事项:

  • 输入字典必须严格遵循 { "name": str, "children": list } 结构,否则会触发 KeyError;生产环境建议增加 try/except 或 dict.get() 防御;
  • 若路径需兼容 Windows(反斜杠 \)或 URL 编码,应在 current_path 构造后做额外处理;
  • 深度嵌套时注意 Python 默认递归限制(约 1000 层),超限时可调用 sys.setrecursionlimit(),但更推荐改用栈式迭代实现。

该方案简洁、健壮、易扩展,是处理任意深度树状字典路径生成的标准实践。


# python  # windows  # 编码  # app  #   # win  # 递归函数  # red 


相关文章: 如何在建站主机中优化服务器配置?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  如何通过虚拟机搭建网站?详细步骤解析  如何在云服务器上快速搭建个人网站?  济南企业网站制作公司,济南社保单位网上缴费步骤?  定制建站是什么?如何实现个性化需求?  如何快速登录WAP自助建站平台?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  淘宝制作网站有哪些,淘宝网官网主页?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  如何通过西部数码建站助手快速创建专业网站?  如何在Windows虚拟主机上快速搭建网站?  如何用PHP工具快速搭建高效网站?  如何通过WDCP绑定主域名及创建子域名站点?  ,石家庄四十八中学官网?  如何在阿里云通过域名搭建网站?  如何高效完成自助建站业务培训?  如何用PHP快速搭建高效网站?分步指南  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  建设网站制作价格,怎样建立自己的公司网站?  如何选择网络建站服务器?高效建站必看指南  网站代码制作软件有哪些,如何生成自己网站的代码?  建站之星后台密码遗忘或太弱?如何重置与强化?  如何快速辨别茅台真假?关键步骤解析  阿里云网站制作公司,阿里云快速搭建网站好用吗?  如何使用Golang安装API文档生成工具_快速生成接口文档  家庭建站与云服务器建站,如何选择更优?  如何快速搭建高效WAP手机网站?  济南专业网站制作公司,济南信息工程学校怎么样?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  模具网站制作流程,如何找模具客户?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  建站DNS解析失败?如何正确配置域名服务器?  h5在线制作网站电脑版下载,h5网页制作软件?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  如何在阿里云高效完成企业建站全流程?  小型网站制作HTML,*游戏网站怎么搭建?  如何用PHP快速搭建CMS系统?  网站制作模板下载什么软件,ppt模板免费下载网站?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  如何选择高效稳定的ISP建站解决方案?  如何获取上海专业网站定制建站电话?  长沙企业网站制作哪家好,长沙水业集团官方网站?  建站之星伪静态规则如何正确配置?  动图在线制作网站有哪些,滑动动图图集怎么做?  如何自定义建站之星网站的导航菜单样式?  建站之星官网登录失败?如何快速解决?  已有域名如何快速搭建专属网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。