更改networkx多图中的边缘属性

时间:2012-02-27 17:38:41

标签: python networkx

在多图中,每次调用* add_edge(a,b,weight = 1)*都会在节点 a b 之间添加新边。构建图形时,是否可以在再次找到 a b 时修改此权重。现在我检查是否连接了(a,b)或(b,a),然后删除边缘,添加一个新的边缘。在我看来,我应该只是能够更新重量。

注意:我确实需要多图,因为我在节点之间使用不同类型的边(使用 key 进行区分)

1 个答案:

答案 0 :(得分:13)

Multigraph.add_edge文档表明您应该使用key参数来唯一标识多图中的边。这是一个例子:

>>> import networkx as nx
>>> G = nx.MultiGraph()
>>> G.add_edge(1, 2, key='xyz', weight=2)
>>> G.add_edge(1, 2, key='abc', weight=1)
>>> G.edges(data=True)
[(1, 2, {'weight': 2}), (1, 2, {'weight': 1})]

现在,要更新由xyz键入的边缘,只需再次传递该参数:

>>> G.add_edge(1, 2, key='xyz', weight=7)
>>> G.edges(data=True)
[(1, 2, {'weight': 7}), (1, 2, {'weight': 1})]

要阅读上一个值,您可以使用get_edge_data,如下所示:

>>> G.get_edge_data(1, 2, key='xyz')
{'weight': 7}