在pydot图中测试节点成员资格
pydot有很多方法可以用来处理dot图中的各种细节,比如读取、写入等等,但我找不到一个简单的方法来检查某个节点是否存在。
>>> d = pydot.Dot()
>>> n = pydot.Node('foobar')
>>> d.add_node(n)
>>> n in d.get_nodes()
False
这个方法只是众多不管用的方法之一。看起来,一旦节点被添加到图中,它就会获得一个新的身份。
>>> d.get_nodes()[0]
<pydot.Node object at 0x171d6b0>
>>> n
<pydot.Node object at 0x1534650>
有没有人能建议一个方法,先创建一个节点,然后在添加之前检查它是否已经在图中,这样你就可以像这样操作:
d = pydot.Dot()
n = pydot.Node('foobar')
if n not in d:
d.add_node(n)
1 个回答
2
在查看源代码时,发现节点名称是唯一的值,用来在图的节点字典中找到对应的节点(有趣的是,如果节点已经存在,它不会报错,而是会把新节点的属性加到已有节点上)。
所以,除非你想在 pydot.py
文件中的某个类里添加一个 __contains__()
的实现,做一些特别的事情,否则你可以直接在你的代码里这样做:
if n.get_name() not in d.obj_dict['nodes'].keys():
d.add_node(n)