基于Pandas DataFrame两列生成进程父子关系树结构
解决进程父子关系树形打印问题
步骤1:数据预处理与构建父子映射
首先清理子进程列表中的冗余空格,再构建父进程到子进程的映射字典:
list1_a = ['process1','process2','process1','process1','process5','process14','process14','process16','process16','process14'] list1_b = ['process2','process3','process4','process5','process6 ','process15','process16','process17','process18','process19'] # 清理子进程字符串中的空格 list1_b = [p.strip() for p in list1_b] # 构建父->子的映射字典 parent_child = {} for parent, child in zip(list1_a, list1_b): if parent not in parent_child: parent_child[parent] = [] parent_child[parent].append(child)
步骤2:确定树的根节点
根节点是仅出现在父进程列表、从未出现在子进程列表的进程,去重后得到:
all_children = set(list1_b) # 筛选根节点并去重排序 roots = sorted(set(p for p in list1_a if p not in all_children))
步骤3:递归打印树形结构
通过递归函数,根据节点层级添加缩进,实现目标格式的树形输出:
def print_tree(node, level=0): # 按层级生成缩进,每深一层增加4个空格 indent = ' ' * level print(f"{indent}|_{node}") # 递归打印子节点 if node in parent_child: for child in parent_child[node]: print_tree(child, level + 1) # 遍历所有根节点打印完整树 for root in roots: print_tree(root) print() # 根节点之间空行分隔
运行结果
执行代码后会输出与目标一致的树形结构:
|_process1 |_process2 |_process3 |_process4 |_process5 |_process6 |_process14 |_process15 |_process16 |_process17 |_process18 |_process19
内容的提问来源于stack exchange,提问作者FarahR
相关产品推荐
相关产品推荐

