Добавление ребра к узлам с одинаковыми именами и разными атрибутами в NetworkX - PullRequest
0 голосов
/ 04 мая 2020

В NetworkX у меня есть несколько узлов, которые представляют логические элементы c, поэтому, например, у меня есть несколько узлов AND. Разница между ними заключается в атрибутах:

G.add_node('AND', name='xyz')
G.add_node('AND', name='qwe')

Я хочу нарисовать ребро для узла speci c AND, например, с именем 'xyz'. Как мне это сделать?

Я пытался:

for node, attr in graph.nodes(data=True):
  if attr.get('xor_name') == xor_name:
     graph.add_edge(n1, node)

Однако в итоге у меня был только один узел AND, а не несколько.

1 Ответ

0 голосов
/ 04 мая 2020

Вы добавили узел AND несколько раз, каждый раз с атрибутом name. Каждый раз, когда вы перезаписывали предыдущее значение атрибута name новым значением.

Проверьте его:

G.add_node('AND', name='xyz')
G.add_node('AND', name='qwe')
G.nodes(data=True) #data=True means it prints the attributes
> [('AND', {'name': 'qwe'})]

Вы намереваетесь, чтобы AND был атрибутом узла xyz, а не xyz, чтобы быть атрибутом узла AND. Так что попробуйте:

G.add_node('xyz', nodetype = 'AND')
G.nodes(data=True)
> [('AND', {'name': 'qwe'}), ('xyz', {'nodetype': 'AND'})]
...