проверка на членство в узле в графе pydot - PullRequest
2 голосов
/ 07 июня 2011

У pydot есть огромное количество связанных методов для получения и настройки каждой мелочи в точечной диаграмме, чтения и записи, назовите ее, но я не могу найти простой тест членства.

>>> 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 голосов
/ 07 июня 2011

Просматривая исходный код, http://code.google.com/p/pydot/source/browse/trunk/pydot.py, кажется, что имена узлов являются уникальными значениями, используемыми в качестве ключей для определения местоположения узлов в словаре узлов графа (хотя, что интересно, вместо того, чтобы возвращать ошибку для существующего узел, он просто добавляет атрибуты нового узла к атрибутам существующего).

Таким образом, если вы не хотите добавить реализацию __contains__() к одному из классов в файле pydot.py, который выполняет следующие действия, вы можете просто сделать следующее в своем коде:

if n.get_name() not in d.obj_dict['nodes'].keys():
    d.add_node(n)
...