如何将列表的列表格式的树形数据打印为可视化树形图?
如何将层级列表转换为可打印的树形结构?
我有一组表示树形结构的嵌套列表(类似顶级目录及其递归展开的子目录/文件),需要将其可视化成可打印的树形图。
示例数据
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
相关产品推荐
相关产品推荐

