gpt4 book ai didi

python - Pydot 中决策树的字典对象

转载 作者:行者123 更新时间:2023-11-30 08:26:10 25 4
gpt4 key购买 nike

我有一个这样的字典对象:

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

我正在尝试使用 pydot 和“菜单”数据 this 创建一个图形(决策树) .

“晚餐”将是顶部节点,其值(鸡肉、牛肉等)位于其下方。引用链接,图形函数有两个参数;一个源和一个节点。

它看起来像 this :

除了“国王”将是“晚餐”,“领主”将是“鸡肉”、“牛肉”等。

我的问题是:如何访问值中的键?要从这些数据创建一棵树,我觉得我需要创建一个循环来检查特定键是否有值并绘制它。我不确定如何调用任何字典对象的值(如果它不一定称为“晚餐”或具有尽可能多的元素。)。

关于如何绘制它有什么建议吗?

最佳答案

使用递归函数

您可能需要考虑使用递归函数(如下面代码中的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 using python3, use node.items() instead of 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')

生成的树结构

enter image description here

关于python - Pydot 中决策树的字典对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13688410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com