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

如何将列表的列表格式的树形数据打印为可视化树形图?

如何将层级列表转换为可打印的树形结构?

我有一组表示树形结构的嵌套列表(类似顶级目录及其递归展开的子目录/文件),需要将其可视化成可打印的树形图。

示例数据

tree = [
    ['Main University'], 
    ['Main University', 'Academic Affairs'], 
    ['Main University', 'Academic Affairs', 'College of Health Sciences'], 
    ['Main University', 'Academic Affairs', 'College of Arts & Science'], 
    ['Main University', 'Academic Affairs', 'College of Arts & Science', 'Biology'], 
    ['Main University', 'Academic Affairs', 'College of Arts & Science', 'Chemistry/Physics'], 
    ['Main University', 'Academic Affairs', 'College of Arts & Science', 'Chemistry/Physics', 'Physics'], 
    ['Main University', 'Academic Affairs', 'College of Arts & Science', 'Biology', 'Biochemistry & Molecular Bio'], 
    ['Main University', 'Academic Affairs', 'College of Arts & Science', 'Biology', 'Earth Sciences'], 
    ['Main University', 'Academic Affairs', 'College of Arts & Science', 'Biology', 'Environmental Studies'], 
    ['Main University', 'Academic Affairs', 'College of Health Sciences', 'Social Work'], 
    ['Main University', 'Academic Affairs', 'College of Arts & Science', 'Chemistry/Physics', 'Chemistry'], 
    ['Main University', 'Academic Affairs', 'College of Health Sciences', 'Health Sciences'], 
    ['Main University', 'Academic Affairs', 'College of Health Sciences', 'Occupational Therapy']
]

实现步骤

1. 构建嵌套树形字典

先把扁平的层级列表转换成嵌套字典,方便后续递归遍历:

def build_tree(items):
    root = {}
    for path in items:
        current = root
        for node in path:
            if node not in current:
                current[node] = {}
            current = current[node]
    return root

2. 递归打印树形结构

编写递归函数,根据节点层级和是否为同层级最后一个节点,生成对应的前缀符号,实现树形打印:

def print_tree(node, prefix="", is_last=True):
    # 处理根节点(仅有一个根元素)
    if isinstance(node, dict) and len(node) == 1:
        root_name = next(iter(node.keys()))
        print(root_name)
        print_tree(node[root_name], prefix="", is_last=False)
        return
    
    # 遍历子节点
    children = list(node.items())
    for index, (name, child) in enumerate(children):
        is_last_child = index == len(children) - 1
        # 输出当前节点
        print(f"{prefix}{'°--' if is_last_child else '¦--'}{name}")
        # 生成下一层级的前缀
        new_prefix = prefix + ('    ' if is_last_child else '¦   ')
        print_tree(child, new_prefix, is_last_child)

3. 调用函数生成树形图

# 构建树并打印
root_tree = build_tree(tree)
print_tree(root_tree)

输出效果

运行代码后会得到类似如下的树形结构:

Main University                              
 °--Academic Affairs                        
     ¦--College of Arts & Science           
     ¦   ¦--Chemistry/Physics               
     ¦   ¦   ¦--Physics                      
     ¦   ¦   °--Chemistry                    
     ¦   °--Biology                          
     ¦       ¦--Biochemistry & Molecular Bio
     ¦       ¦--Earth Sciences              
     ¦       °--Environmental Studies       
     °--College of Health Sciences          
         ¦--Health Sciences                 
         ¦--Occupational Therapy            
         °--Social Work   

内容的提问来源于stack exchange,提问作者Tyler Rinker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:15:44