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

如何正确编写递归函数获取Wrike项目的嵌套字典结构?

修复Wrike文件夹层级递归遍历,生成完整嵌套字典

当前代码尝试递归遍历Wrike文件夹结构,将其转换为以名称为键的嵌套字典,但存在递归逻辑错误,导致深层子文件夹(如PRJ03的子文件夹)无法被纳入结果中,仅能获取到一级子文件夹PRJ01、PRJ02,PRJ03的子结构丢失。

问题根源分析

  1. 递归结果未赋值:原代码中调用traverse(child_id)时,没有将返回的子层级字典赋值给对应的节点,导致深层结构无法被添加到最终的层级中。
  2. 冗余的API调用:在循环子ID时重复调用get_folder(folder_childId),而traverse函数本身已经会调用get_folder获取该ID的文件夹数据,属于多余操作。

修正后的代码

import requests
import json

token = ""
startpoint = 'https://www.wrike.com/api/v4'
root_id = ''

def make_request(endpoint):
    headers = {'Authorization': f'Bearer {token}'}
    url = f"{startpoint}/{endpoint}"
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.json()

def get_folder(idx):
    data = make_request(f"folders/{idx}")['data'][0]
    filtered_dict = {
                    'title': data['title'],
                    'id': data['id'],
                    'childIds': data['childIds']
                    }
    return filtered_dict

def traverse(folder_id):
    folder_data = get_folder(folder_id)
    folder_title = folder_data['title']
    # 初始化当前文件夹的结构,值为子文件夹的嵌套字典
    hierarchy = {folder_title: {}}
    
    for child_id in folder_data['childIds']:
        # 递归获取子文件夹的完整层级,并添加到当前文件夹的子结构中
        child_hierarchy = traverse(child_id)
        # 提取子文件夹的标题和对应的结构,添加到当前节点
        hierarchy[folder_title].update(child_hierarchy)
    
    return hierarchy

hierarchy = traverse(root_id)
print(json.dumps(hierarchy, indent=2))

关键修改说明

  1. 直接复用递归返回值:调用traverse(child_id)得到子文件夹的完整层级字典,通过update方法将其添加到当前文件夹的子结构中,确保深层节点被正确嵌套。
  2. 简化逻辑:去掉循环中冗余的get_folder调用,直接使用traverse处理子ID,减少不必要的API请求,同时让逻辑更清晰。
  3. 结构初始化优化:直接以当前文件夹标题为键,初始化空字典作为子结构容器,避免多余的判断逻辑。

预期输出

修正后运行代码,将得到完整的层级结构:

{
  "MAIN_FOLDER": {
    "PRJ01": {},
    "PRJ02": {},
    "PRJ03": {
      "PRJ03_SUBFOLDER01": {},
      "PRJ03_SUBFOLDER02": {}
    }
  }
}

内容的提问来源于stack exchange,提问作者ivan.grishin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:35:33