如何提取员工多级上级并生成Manager层级列?
如何根据员工-经理层级关系构建多级经理列
输入数据
| Employee | Manager |
|---|---|
| rahul | aria |
| aria | priya |
| priya | sheela |
| vasant | reema |
| reema | carol |
| guha | reeye |
期望输出
| Employee | Manager 1 | Manager 2 | Manager 3 |
|---|---|---|---|
| rahul | aria | priya | sheela |
| vasant | reema | carol | |
| guha | reeye |
实现步骤
- 构建快速查找映射:把员工-经理的对应关系存成字典,这样能瞬间查到任意员工的直接上级。
- 筛选目标员工:找出所有没出现在「Manager」列里的员工——这些人就是输出表格第一列要展示的底层员工,他们没有下属。
- 遍历层级链:对每个底层员工,一层一层往上找经理,直到找不到更高层的上级为止,把这些经理按顺序存成一个列表。
- 补全表格行:把每个员工的层级列表对应到「Manager 1」「Manager 2」等列,层级不够的位置留空,保证每行长度一致。
代码示例(Python)
# 1. 把原始数据转成员工-经理映射字典 emp_manager_map = { "rahul": "aria", "aria": "priya", "priya": "sheela", "vasant": "reema", "reema": "carol", "guha": "reeye" } # 2. 筛选出所有底层员工(没被其他人当作经理的人) all_managers = set(emp_manager_map.values()) target_employees = [emp for emp in emp_manager_map if emp not in all_managers] # 3. 为每个底层员工生成完整的经理层级链 result_data = [] max_hierarchy_level = 0 for emp in target_employees: manager_chain = [] current_manager = emp_manager_map.get(emp) # 循环往上找经理,直到找不到为止 while current_manager is not None: manager_chain.append(current_manager) current_manager = emp_manager_map.get(current_manager) # 记录最长的层级数,用来确定表格列数 if len(manager_chain) > max_hierarchy_level: max_hierarchy_level = len(manager_chain) result_data.append( (emp, manager_chain) ) # 4. 生成Markdown格式的输出表格 # 构建表头 headers = ["Employee"] + [f"Manager {i+1}" for i in range(max_hierarchy_level)] # 构建表格行 table_rows = [] for emp, chain in result_data: # 补全空缺的单元格 row = [emp] + chain + [""]*(max_hierarchy_level - len(chain)) table_rows.append(row) # 打印输出表格 print("| " + " | ".join(headers) + " |") print("| " + " | ".join(["---"]*len(headers)) + " |") for row in table_rows: print("| " + " | ".join(row) + " |")
代码说明
- 字典映射让查找上级的效率极高,不用反复遍历原始表格。
- 筛选底层员工的逻辑很简单:只要某个员工的名字没出现在所有经理的名单里,那他就是最底层的。
- 循环遍历层级的时候,每一步都查当前经理的上级,直到查不到就停止,这样不会遗漏任何一层。
- 最后补全空单元格是为了让表格格式整齐,符合期望的输出样式。
内容的提问来源于stack exchange,提问作者Yash
相关产品推荐
相关产品推荐

