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

Python如何将目录结构列表转换为指定格式的嵌套字典

Python路径列表转嵌套目录字典实现

正确实现代码

def build_dir_structure(path_list):
    root = {}
    for path in path_list:
        # 判断是否为目录
        is_dir = path.endswith('/')
        # 分割路径为各个层级的名称
        parts = path.rstrip('/').split('/')
        if not parts:
            continue
        # 移动指针到倒数第二层节点
        cur = root
        for part in parts[:-1]:
            if part not in cur:
                cur[part] = {}
            cur = cur[part]
        # 处理最后一层
        last_part = parts[-1]
        if is_dir:
            # 目录设为空字典,已经存在的话不修改原有内容
            if last_part not in cur:
                cur[last_part] = {}
        else:
            # 文件设为None
            cur[last_part] = None
    return root

# 测试用例
paths = [
    'fold/2021/',
    'fold/2021/11/',
    'fold/2021/11/01/',
    'fold/2021/11/01/123.gz',
    'fold/2021/11/01/345.gz',
    'fold/2021/12/',
    'fold/2021/12/02/',
    'fold/2022/'
]
result = build_dir_structure(paths)
print(result)

运行后输出的结构和要求的目标完全一致。

实现逻辑说明

  1. 初始化根目录为空字典,遍历所有路径字符串
  2. 对每个路径先判断是否为目录(以/结尾即为目录),再去掉末尾的/后按/分割为层级数组
  3. 用指针逐层遍历前n-1个层级,遇到不存在的层级就创建空字典,指针同步进入子层级
  4. 处理最后一个层级:如果是目录就创建空字典(已经存在的话不覆盖原有子内容),如果是文件就赋值为None

原有代码问题说明

你写的代码存在两个核心问题:

  • 函数定义参数和调用参数不匹配,定义时只接收1个path参数,调用时传了main_dict和path两个参数
  • 每次递归都新建独立的字典对象,没有复用已经存在的父层级结构,处理新路径时会覆盖之前同层级已经写入的内容,最终无法拼接出完整的嵌套结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:45:03