[英]List of lists to Tree Diagram Print
我有一個構成樹的列表列表,類似於具有目錄和文件遞歸列表的頂級目錄。 我想把它想象成一棵印刷樹。
如何查看打印為樹的列表列表?
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']
]
¦--
、 °--
等字形無關緊要)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
如果數組不是太大,您可以先將其轉換為樹,然后打印
#!/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)
打印出以下內容
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
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)
產量:
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.