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

Python如何递归遍历嵌套字典 提取所有文件夹项并统计数量

统计任意深度嵌套书签文件夹的实现方案

你的书签数据是标准多叉树结构,且嵌套层级无上限,选择无递归深度风险的树遍历方案,即可同时完成文件夹总数统计、全量文件夹名称收集,不需要提前预判嵌套深度。


推荐方案:迭代式深度优先遍历(生产环境可用)

该方案用栈手动维护待遍历节点,完全不受Python默认递归深度上限(约1000层)的限制,哪怕极端场景下嵌套上万层也能正常运行:

def get_all_folders(bookmark_data):
    root = bookmark_data["bookmarks_tab"]
    folder_names = []
    traverse_stack = [root]

    while traverse_stack:
        current = traverse_stack.pop()
        # 仅统计类型为folder的节点
        if current.get("type") == "folder":
            folder_names.append(current["name"])
            # 子节点倒序入栈可保持和自然层级一致的遍历顺序,无顺序要求可省略reversed
            for child in reversed(current.get("children", [])):
                traverse_stack.append(child)
    
    return len(folder_names), folder_names

调用方式

total_folder_count, all_folder_names = get_all_folders(data)

返回值第一个是文件夹总数量,第二个是按遍历顺序排列的所有文件夹名称列表,根目录bookmarks_tab默认会被计入统计。


备选方案:递归实现(代码简洁)

如果业务场景里不存在极端深的嵌套(普通用户书签嵌套几乎不会超过100层),可以用写法更简洁的递归实现:

def get_all_folders_recursive(node, result=None):
    if result is None:
        result = []
    if node.get("type") == "folder":
        result.append(node["name"])
        for child in node.get("children", []):
            get_all_folders_recursive(child, result)
    return len(result), result

# 调用方式
total_folder_count, all_folder_names = get_all_folders_recursive(data["bookmarks_tab"])

注意:Python默认递归深度限制为1000左右,若嵌套层级超过阈值会触发RecursionError,此时请切换为上面的迭代方案。


实现说明

  • 两种方案都会自动遍历所有层级的子节点,不需要手动编写多层嵌套处理逻辑
  • 自动过滤普通书签节点(非folder类型),不会出现误统计
  • 代码做了容错处理,节点缺失children属性时不会抛出异常
  • 如果需要排除根目录文件夹,只需要在收集名称时加判断跳过根节点即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:21:39