如何在Python中从pandas数据帧生成分层JSON树

2024-05-15 21:51:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想写一个函数,返回一个基于JSON数据的树

这是一个数据帧:

employee_id     designation     department      name      manager_emp_id
1                co-founder      co-founder      john         2
2                ceo             co-founder      rocky       
3                cto             tech            alfred       2
4                sde3            tech            bruce        3
5                sde1            tech            tony         4
6                cmo             marketing       steve        2
7                sde1            tech            bucky        3

这是我正在寻找的树的一个示例:

       ceo 
    /   |  \
   /    |   \
 cto   cmo   coo 
  |      |     \
  |      |      \
 sde3  sales   operative executives
  |
  |
 sde1 

输出格式:

期望输出

{
    employee_id : 2, 
    name : rocky, 
    reportees : [
                    {
                        employee_id : 3, 
                        name : alfred, 
                        reportees:[....]
                    }
                ]
}

Tags: 数据nameidemployeetechcoalfredrocky
1条回答
网友
1楼 · 发布于 2024-05-15 21:51:43

您可以使用递归:

d = [{'employee_id': 1, 'designation': 'co-founder', 'department': 'co-founder', 'name': 'john', 'manager_emp_id': 2}, {'employee_id': 2, 'designation': 'ceo', 'department': 'co-founder', 'name': 'rocky', 'manager_emp_id': ''}, {'employee_id': 3, 'designation': 'cto', 'department': 'tech', 'name': 'alfred', 'manager_emp_id': 2}, {'employee_id': 4, 'designation': 'sde3', 'department': 'tech', 'name': 'bruce', 'manager_emp_id': 3}, {'employee_id': 5, 'designation': 'sde1', 'department': 'tech', 'name': 'tony', 'manager_emp_id': 4}, {'employee_id': 6, 'designation': 'cmo', 'department': 'marketing', 'name': 'steve', 'manager_emp_id': 2}, {'employee_id': 7, 'designation': 'sde1', 'department': 'tech', 'name': 'bucky', 'manager_emp_id': 3}]
def get_tree(_id = ''):
   return [{'employee_id':i['employee_id'], 
            'name':i['name'], 
            **({} if not (rp:=get_tree(i['employee_id'])) else {'reportees':rp})} 
            for i in d if i['manager_emp_id'] == _id]

print(get_tree())

输出:

[{'employee_id': 2, 'name': 'rocky', 'reportees': [{'employee_id': 1, 'name': 'john'}, {'employee_id': 3, 'name': 'alfred', 'reportees': [{'employee_id': 4, 'name': 'bruce', 'reportees': [{'employee_id': 5, 'name': 'tony'}]}, {'employee_id': 7, 'name': 'bucky'}]}, {'employee_id': 6, 'name': 'steve'}]}]

相关问题 更多 >