使用递归函数
您可能要考虑使用递归功能(如visit在
我下面的代码,让你能够处理一般的嵌套的字典。在
这个功能,你想传递一个parent参数来跟踪谁是
你的来电节点。此外注意,您用于isinstance检查
键的字典值是否是它自己的字典,在这种情况下,您需要
visit递归调用。
import pydotmenu = {'dinner': {'chicken':'good', 'beef':'average', 'vegetarian':{ 'tofu':'good', 'salad':{ 'caeser':'bad', 'italian':'average'} }, 'pork':'bad'} }def draw(parent_name, child_name): edge = pydot.Edge(parent_name, child_name) graph.add_edge(edge)def visit(node, parent=None): for k,v in node.iteritems(): 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: draw(parent, k) visit(v, k) else: draw(parent, k) # drawing the label using a distinct name draw(k, k+'_'+v)graph = pydot.Dot(graph_type='graph')visit(menu)graph.write_png('example1_graph.png')


