当前位置:   article > 正文

python画树形结构的类封装,graphviz利用,嵌套字典,附完整代码可直接使用_python 树型结构转化为生成图片的字典

python 树型结构转化为生成图片的字典

理想结果

自己创建的一个字典,然后根据字典画出的语法树:
自己画的一个语法树

代码及使用提醒

封装的类的使用:

import pydot

menu = {'dinner':
            {'chicken':'good',
             'beef':'average',
             'vegetarian':{
                   'tofu':'good',
                   'salad':{
                            'caeser':'bad',
                            'italian':'average'}
                   },
             'pork':'bad'}
        }

class grammer_tree:
    graph = None


    def __init__(self):
        self.graph = pydot.Dot(graph_type='graph')

    def draw(self,parent_name, child_name):
        edge = pydot.Edge(parent_name, child_name)
        self.graph.add_edge(edge)

    def visit(self,node, parent=None):  #运用了递归
        for k,v in node.items():
            if isinstance(v, dict):      #是否是叶子节点
                # We start with the root node whose parent is None
                # we don't want to graph the None node
                if parent:
                    self.draw(parent, k)
                self.visit(v, k)
            else:
                if k != '$':   #只画非空元素  $代表一个空节点,可删去,或修改为其他
                    self.draw(parent, k)
                # drawing the label using a distinct name
                #self.draw(k, k+'_'+v)   子结点为空  不用画

    def start(self,dic):

        self.visit(dic)
        # 下面二者根据自己需求使用
        self.graph.write_png('tree.png')  # 最后结果生成png图片格式
        # graph.write_pdf('tree.pdf')  #最后结果生成pdf


if __name__=="__main__":
    photo_draw = grammer_tree()
    photo_draw.start(menu)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

调用grammer_tree的类,将字典传入该类的start函数即可使用,并生成对应的png图片或者pdf文件

上面这段程序的运行结果:
程序运行结果
具体的显示结果可根据自己如何构造这个深层嵌套的字典和想要显示的结果来修改

运行时所遇问题的解决办法

关于运行过程中找不到文件和找不到路径的解决办法:页面跳转

关于如何生成深层嵌套的字典的提醒:

上面的visit函数使用了递归的方式来处理一个深层嵌套的字典,在生成一个深层嵌套的字典的时候,也可以用向下递归的方式来生成一个这样的字典

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/169546
推荐阅读
相关标签
  

闽ICP备14008679号