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

Python实现组织树员工完整管理路径收集问题求助

问题:生成员工完整管理路径字典

我有一个JSON格式的组织树数据,需要为每位员工存储完整的“管理路径”,例如:management_chain["clever"] = {"bravo", "amos"},management_chain["bart"] = {"amos"}。但我编写的遍历代码返回的字典无法保存正确值,请求解决。

组织树JSON数据

{
    "name": "amos",
    "direct_reports": [
        {
            "name": "bart",
            "direct_reports": [
                {
                    "name": "colin",
                    "direct_reports": []
                },
                {
                    "name": "clara",
                    "direct_reports": []
                }
            ]
        },
        {
            "name": "bravo",
            "direct_reports": [
                {
                    "name": "cupid",
                    "direct_reports": []
                },
                {
                    "name": "clever",
                    "direct_reports": []
                }
            ]
        }
    ]
}

现有代码

def get_herarchy(org):
    tmp_obj = {}
    tmp_obj['managers'] = []
    for emp in org['direct_reports']:
        tmp_obj['managers'].append(org['name'])
        print("manager "+org['name'])
        if len(emp['direct_reports'])>0:
            get_herarchy(emp)
        tmp_obj['name'] = emp['name']
        print(emp['name'])
    return tmp_obj

问题分析

原代码存在几个核心问题:

  • 每次递归调用都会重新创建tmp_obj,递归得到的结果完全没有被收集到最终输出中
  • tmp_obj的name和managers会被循环反复覆盖,最终只会返回最后一个员工的信息,无法存储所有员工的管理路径
  • 没有传递当前层级的管理路径,递归时无法继承上级的管理者列表

解决方案

通过传递当前管理路径+全局结果字典的方式实现,递归遍历每个员工时,将当前员工的完整管理路径存入结果字典:

def build_management_chain(org, current_managers=None, result=None):
    # 初始化结果字典和当前管理路径
    if result is None:
        result = {}
    if current_managers is None:
        current_managers = []
    
    # 遍历当前节点的直接下属
    for emp in org['direct_reports']:
        # 当前员工的管理路径是上级的管理路径加上当前节点的名字
        emp_managers = current_managers + [org['name']]
        # 将员工和对应的管理路径存入结果(用集合去重,也可以用列表保持层级顺序)
        result[emp['name']] = set(emp_managers)
        
        # 如果该员工还有下属,递归处理,传递当前员工的管理路径
        if emp['direct_reports']:
            build_management_chain(emp, emp_managers, result)
    
    return result

# 测试调用
org_data = {
    "name": "amos",
    "direct_reports": [
        {"name": "bart", "direct_reports": [{"name": "colin", "direct_reports": []}, {"name": "clara", "direct_reports": []}]},
        {"name": "bravo", "direct_reports": [{"name": "cupid", "direct_reports": []}, {"name": "clever", "direct_reports": []}]}
    ]
}

management_chain = build_management_chain(org_data)
print(management_chain)

输出结果

运行后会得到符合要求的管理路径字典:

{
    'bart': {'amos'},
    'colin': {'bart', 'amos'},
    'clara': {'bart', 'amos'},
    'bravo': {'amos'},
    'cupid': {'bravo', 'amos'},
    'clever': {'bravo', 'amos'}
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:50:55