тест на членство узла в графе pydot

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)

person jjon    schedule 07.06.2011    source источник


Ответы (1)


Просматривая исходный код, 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)
person JAB    schedule 07.06.2011
comment
Спасибо @JAB. Я пришел к такому же выводу. Неудовлетворительно, но ваше решение лучше моего: if n.get_name() not in [node.get_name() for node in d.get_node_list()] - person jjon; 08.06.2011
comment
Вы всегда можете обсудить это с создателями pydot. В конце концов, это проект с открытым исходным кодом. ... Кроме того, я только что узнал, почему, в частности, у вас возникла проблема с изменением личности, и почему они могут не захотеть что-то менять. code.google.com/p/pydot Объекты Graph, Node, Edge являются просто прокси для данные и создаются по запросу. - person JAB; 08.06.2011