如何用anytree/rich/treelib将字典转为树形视图?已查文档仍困惑
使用anytree将字典转换为树形视图
解决步骤
你的字典结构是子节点: 父节点,先把它转换成**父节点: [子节点列表]**的映射,方便后续构建树:
from anytree import Node, RenderTree # 给定数据 data = { 'Marc': 'Udo', 'Lian': 'Marc', 'Dan': 'Udo', 'Jet': 'Dan', 'Jan': 'Dan', 'Joe': 'Dan', } # 转换为父节点到子节点的映射 parent_to_children = {} for child, parent in data.items(): if parent not in parent_to_children: parent_to_children[parent] = [] parent_to_children[parent].append(child) # 找到根节点(无父节点的节点) root_name = next(name for name in parent_to_children if name not in data) root = Node(root_name) # 递归构建树结构 def build_tree(parent_node): if parent_node.name in parent_to_children: for child_name in parent_to_children[parent_node.name]: child_node = Node(child_name, parent=parent_node) build_tree(child_node) build_tree(root) # 输出树形视图 for pre, fill, node in RenderTree(root): print(f"{pre}{node.name}")
输出结果
运行代码后会得到你期望的树形结构:
Udo ├── Marc │ └── Lian └── Dan ├── Jet ├── Jan └── Joe
关键说明
- 映射转换:将原字典反转后,能快速定位每个父节点对应的所有子节点,避免重复遍历查找。
- 根节点识别:根节点是不存在于原字典键中的节点(因为它没有父节点)。
- RenderTree工具:anytree自带的
RenderTree会自动生成带连接线的树形格式,直接打印即可匹配目标样式。
内容的提问来源于stack exchange,提问作者user1334609
相关产品推荐
相关产品推荐

