簡體   English   中英

樹形圖打印列表列表

[英]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']
]

所需的 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   

如果數組不是太大,您可以先將其轉換為樹,然后打印

#!/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM