直接访问(没有迭代器)边缘及其属性

时间:2019-07-09 11:17:51

标签: python networkx

确实是不可能通过以下第一种方法访问边缘及其属性,而又有第二种方法比较笨拙吗?

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)还是我相信。

1 个答案:

答案 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

Documentation