ono*_*ono 6 python dictionary machine-learning decision-tree pydot
我有一个字典对象:
menu = {'dinner':{'chicken':'good','beef':'average','vegetarian':{'tofu':'good','salad':{'caeser':'bad','italian':'average'}},'pork':'bad'}}
Run Code Online (Sandbox Code Playgroud)
我试图使用pydot与"菜单"数据创建一个图表(决策树)此.
'晚餐'将是顶级节点,其价值(鸡肉,牛肉等)低于它.参考链接,图形函数有两个参数; 源和节点.
它看起来像这样:
"王"将是"晚餐","主"将是"鸡肉","牛肉"等.
我的问题是:如何访问值中的键?要从这些数据创建一个树,我觉得我需要创建一个循环,检查是否有特定键的值并绘制它.我不确定如何调用任何字典对象的值(如果它不一定被称为'晚餐'或具有尽可能多的元素.).
有关如何绘制图表的任何建议吗?
gre*_*ess 12
您可能需要考虑使用递归函数(如visit下面的代码中所示,这样您就可以处理一般的嵌套字典.在此函数中,您希望传递一个parent参数来跟踪您的传入节点.请注意,您isinstance用来检查键的字典值是否是自己的字典,在这种情况下,您需要visit递归调用.
import pydot
menu = {'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')
Run Code Online (Sandbox Code Playgroud)
