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

如何用Python递归实现任意层级自定义文件夹转字典?

递归实现任意层级自定义目录字典构建

我需要基于自定义的Folder类目录结构构建字典,注意这不是操作系统目录,没法用os库。现在的代码只能处理3层级子目录,想改成能处理任意层级的递归循环。

现有代码:

if isinstance(parentfolder, Folder):
    for child in parentfolder.child:
        subchildren = []
        if isinstance(child, Folder):
           for subchild in child.child: 
              if isinstance(subchild, Folder):
                 subchildren.append({'folder' : subchild})
           children.append({'folder' : subchildren})
    DirDict.append({'folder' : parentfolder, 'children': children })

预期输出的字典结构(仅包含符合isinstance判断的Folder对象):

{'folder' : 'somefolder', 'children' : [{'folder' : 'somechildfolder', 'children' : [{'folder' : 'somegrandchildfolder', 'children': [...]}]}]}

解决方案

核心思路是写一个递归函数,每个Folder对象都调用这个函数生成自身的字典结构,同时递归处理它的所有子Folder。不管嵌套多少层,递归都会自动遍历处理。

实现代码:

def build_folder_dict(folder):
    # 过滤非Folder类型的对象
    if not isinstance(folder, Folder):
        return None
    # 初始化当前文件夹的字典结构
    folder_dict = {'folder': folder, 'children': []}
    # 遍历所有子项,递归处理每个子Folder
    for child in folder.child:
        child_dict = build_folder_dict(child)
        if child_dict is not None:
            folder_dict['children'].append(child_dict)
    return folder_dict

# 使用示例:假设root_folder是最顶层的Folder对象
DirDict = []
root_dict = build_folder_dict(root_folder)
if root_dict:
    DirDict.append(root_dict)

代码说明

  • 递归函数build_folder_dict先校验输入对象是否为Folder类型,不符合直接返回None;
  • 为当前Folder创建基础字典,包含自身引用和空的子节点列表;
  • 遍历当前Folder的所有子项,对每个子项递归调用自身,若返回有效字典(即子项是Folder),就加入当前字典的children列表;
  • 顶层调用后,将生成的完整目录字典加入DirDict即可。

这种方式可以自动适配任意深度的嵌套目录结构,完全替代原有的固定层级循环逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:30:50