首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python -收集全路径直到组织树上的叶子。

python -收集全路径直到组织树上的叶子。
EN

Stack Overflow用户
提问于 2022-11-20 14:09:41
回答 1查看 14关注 0票数 0

我把组织树存储为json

代码语言:javascript
复制
{
    "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“store”={bravo,amos} management_chain"bart"={amos}

目前,我设法触及所有边缘,并将其归类为员工和经理,代码如下:

代码语言:javascript
复制
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

但是字典中没有正确的值

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-20 14:39:31

像这样,也许:

代码语言:javascript
复制
def get_chain(org, name):
    if org['name'] == name:
        return [name]
    for emp in org['direct_reports']:
        chain = get_chain(emp, name)
        if chain:
            return [org['name']] + chain
    return None

print(get_chain(org, 'bart'))    # ['amos', 'bart']
print(get_chain(org, 'clever'))  # ['amos', 'bravo', 'clever']

UPD:这就是如何制作字典:

代码语言:javascript
复制
def nested_iter(org):
    yield org['name']
    for emp in org['direct_reports']:
        yield from nested_iter(emp)

print({name: get_chain(org, name)[0:-1] for name in nested_iter(org)})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74508822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档