- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个这样的字典对象:
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')
关于python - Pydot 中决策树的字典对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13688410/
在使用 pygraphviz 进行了一些工作后,我又回到了 pydot。 pygraphviz 中有用的方法之一是 iterdegree()。可以用 pydot 做类似的事情吗?即:找到最高度节点,以
我尝试使用 Ipython 和 keras.utis.vis_utils 可视化 Keras 模型。但我收到以下错误。 ImportError: Failed to import pydot. Ple
我无法在 Spyder 中导入 pydot 包,请你帮我看看有没有其他方法可以导入它。我需要它来进行决策树可视化。声明 import pydot 不工作。 最佳答案 pip install pydot
我在 Windows 10 上使用 Anaconda Python 2.7 我正计划进行 Keras 可视化,所以(当 spyder 打开时)我打开了 Anaconda 命令提示符并 pip 安装了
我也看到过类似的问题,但也没有解决,所以我决定问一下。 我正在尝试使用 keras 可视化我的模型 from keras.utils import plot_model plot_model(mode
我想为使用 pydot 生成的图中的节点添加多行工具提示。这是我正在做的事情: node = pydot.Node('abc', style='filled', fillcolor='#CCFF00'
我想以这样的方式排列节点,使得有 2 个簇 A 和 B。 B 还有 2 个簇 C 和 D。 同样,我编写了下面的程序,其中我在一个簇中添加 2 个簇,然后将簇 B 作为主图中的子图添加。 但是嵌套框不
我有一个这样的字典对象: menu = {'dinner':{'chicken':'good','beef':'average','vegetarian':{'tofu':'good','salad'
当我尝试安装 pydot 时,它说我已经安装了它。 但是每当我尝试导入它时,我都会收到一条错误消息:导入 pydot 失败。您必须安装 pydot 和 graphviz 才能使 pydotprint
即时 - Ubuntu 12.04,python 2.7,使用 pydot 1.0.2 我正在尝试让 pydot 将树打印为 .png。我正在制作我的节点: subnode = pydot.Node(
我正在使用 pydot 在 python 中绘制图形。我想表示一个决策树,比如(a1、a2、a3 是属性,两个类是 0 和 1: a1>3 / \ a2>10
我正在尝试可视化我的 DecisionTree,但出现错误代码是: X = [i[1:] for i in dataset]#attribute y = [i[0] for i in dataset]
我试图打印 VGG16 模型的模型摘要,并绘制模型并将其保存在 .png 文件中。 from keras.applications.vgg16 import VGG16 from keras.util
我编写了一个 python 类来显示二叉搜索树并为其设置动画。然而,由 pyDot 边缘和节点命令生成的图形似乎不允许我控制连接树的每个元素的箭头的角度或方向。 有很多对节点形状的控制,但似乎没有对线
我使用 pydot 创建一个有向树并将其可视化。很好,但我还想检索树的叶节点。我怎样才能做到这一点? 一般来说,问题是如何访问存储在 pydot 对象内的节点和边。 pydot 是否提供此功能或者它只
我正在为我的实验室实验制作一个动态生成的图表。这是现在的样子: 理想情况下,我希望蓝色节点在顶部排成一条直线,这样无论导致它们的历史有多大,当前的实验都是可见的。有没有办法在 GraphViz 中做到
我编写了一段代码将我的 MultiDiGraph() 转换为 pydot 图形以显示自循环和箭头,但在转换之后,pydot图 A 丢失了 G 的所有属性。如何更改图 A 的节点大小并将它们设置为等于
我想使用 pydot 创建一个有向图,并且我也有一个现成的边集。边集的类型可以是列表,也可以是元组,这都没关系,因为我可以提前根据自己的要求构造边集,就像[(1,2),(2,3), (3,2)] 或
有谁知道如何在 pydot 中的两个子图(簇)之间添加边? callgraph = pydot.Dot(graph_type='digraph',fontname="Verdana") cluster
我训练了一个决策树(Python字典)如下。现在我正在尝试使用 pydot 绘制它.在定义树的每个节点(pydot 图)时,我为它指定了一个唯一(且冗长)的名称和一个简短的标签。 我的问题是,在我通过
我是一名优秀的程序员,十分优秀!