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)
运行后输出的结构和要求的目标完全一致。
实现逻辑说明
- 初始化根目录为空字典,遍历所有路径字符串
- 对每个路径先判断是否为目录(以
/结尾即为目录),再去掉末尾的/后按/分割为层级数组 - 用指针逐层遍历前n-1个层级,遇到不存在的层级就创建空字典,指针同步进入子层级
- 处理最后一个层级:如果是目录就创建空字典(已经存在的话不覆盖原有子内容),如果是文件就赋值为None
原有代码问题说明
你写的代码存在两个核心问题:
- 函数定义参数和调用参数不匹配,定义时只接收1个
path参数,调用时传了main_dict和path两个参数 - 每次递归都新建独立的字典对象,没有复用已经存在的父层级结构,处理新路径时会覆盖之前同层级已经写入的内容,最终无法拼接出完整的嵌套结构
内容的提问来源于stack exchange,提问作者Ashik Mydeen
相关产品推荐
相关产品推荐

