python画树形结构的类封装,graphviz利用,嵌套字典,附完整代码可直接使用

导读:本篇文章讲解 python画树形结构的类封装,graphviz利用,嵌套字典,附完整代码可直接使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

理想结果

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

代码及使用提醒

封装的类的使用:

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)

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

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/114585.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!