You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:20:49