在pydot图中测试节点成员资格

2 投票
1 回答
2781 浏览
提问于 2025-04-16 19:07

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)

撰写回答