确实是这样的情况下,第一种访问边缘及其属性的方法是不可能的,而第二种方式更为笨拙是必要的吗?

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) - 或者我相信。

分析解答

我用networkx 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 G.edges[e]['color'] == 'red'

文档