[英]List of lists to Tree Diagram Print
I have a list of lists that make up a tree, similar to a top level directory with a recursive listing of directories and files.我有一个构成树的列表列表,类似于具有目录和文件递归列表的顶级目录。 I want to visualize this as a printed tree.我想把它想象成一棵印刷树。
How can a see a list of lists printed as a tree?如何查看打印为树的列表列表?
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']
]
¦--
, °--
, etc. don't matter)所需的 Output(或类似的;即像¦--
、 °--
等字形无关紧要)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
if the array is not too large you can convert it to a tree first then print it如果数组不是太大,您可以先将其转换为树,然后打印
#!/bin/env python3
from collections import OrderedDict
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']
]
class Tree:
def __init__(self, data):
self.data = data
self.children = OrderedDict()
def add_array(self, obj):
if obj:
if obj[0] not in self.children:
self.children[obj[0]] = Tree(obj[0])
self.children[obj[0]].add_array(obj[1:])
def print_tree(self, l):
s = " " * l * 4 + self.data + "\n"
for x in self.children.values():
s += x.print_tree(l+1)
return s
def __repr__(self):
return self.print_tree(0)
root = Tree("root")
for x in tree:
root.add_array(x)
print(root)
prints out the following打印出以下内容
root
Main University
Academic Affairs
College of Health Sciences
Social Work
Health Sciences
Occupational Therapy
College of Arts & Science
Biology
Biochemistry & Molecular Bio
Earth Sciences
Environmental Studies
Chemistry/Physics
Physics
Chemistry
The bigtree package can do this nicely: bigtree package可以很好地做到这一点:
from bigtree import list_to_tree, print_tree
path_list = ['/'.join(x) for x in tree]
root = list_to_tree(path_list)
print_tree(root)
Yields:产量:
Main University
└── Academic Affairs
├── College of Health Sciences
│ ├── Social Work
│ ├── Health Sciences
│ └── Occupational Therapy
└── College of Arts & Science
├── Biology
│ ├── Biochemistry & Molecular Bio
│ ├── Earth Sciences
│ └── Environmental Studies
└── Chemistry
└── Physics
├── Physics
└── Chemistry
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.