确实是不可能通过以下第一种方法访问边缘及其属性,而又有第二种方法比较笨拙吗?
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'
这是对previous问题的小改动,该问题依赖于迭代器。 API是否具有data=True
变体用于直接访问(没有迭代器)?
NetworkX 1.x和2.x之间的区别与上面的代码和当前的问题无关(除了在2.x中可以写assert e in G.edges
)还是我相信。
答案 0 :(得分:0)
这确实是使用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