理想结果
代码及使用提醒
封装的类的使用:
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