Прямой доступ (без итератора) к ребрам и их атрибутам - PullRequest
0 голосов
/ 09 июля 2019

Действительно ли так, что первый способ доступа к ребру и его атрибутам ниже невозможен и необходим более неуклюжий второй?

import networkx as nx
G = nx.Graph()
G.add_edge('foo', 'bar', color='red')

e = ('foo', 'bar')
assert e in G.edges()

# (1)
assert G.edge[e]['color'] == 'red'

# (2)
assert G.edge[e[0]][e[1]]['color'] == 'red'

Это небольшая вариация предыдущего вопроса, в котором использовался итератор. Есть ли у API вариант data=True для прямого доступа (без итератора)?

Различия между NetworkX 1.x и 2.x не имеют отношения к приведенному выше коду и к настоящему вопросу (за исключением того, что в 2.x можно написать assert e in G.edges) - или, как я полагаю.

1 Ответ

0 голосов
/ 09 июля 2019

Это действительно лучшее, что вы можете сделать с 1.x, но с 2.x вы можете сделать лучше.Оба варианта отображаются ниже.

import networkx as nx
G = nx.Graph()

e = ('foo', 'bar')
G.add_edge(*e, color='red')  # equivalent to G.add_edge('foo', 'bar', color='red')

assert e in G.edges()

if nx.__version__ == '1.11':
    # NetworkX 1.x
    assert G.edge[e[0]][e[1]]['color'] == 'red'  # edge in singular
elif nx.__version__ == '2.3':
    # NetworkX 2.x
    assert G.edges[e]['color'] == 'red'  # edges in plural

Документация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...