在多图中,每次调用* add_edge(a,b,weight = 1)*都会在节点 a 和 b 之间添加新边。构建图形时,是否可以在再次找到 a 和 b 时修改此权重。现在我检查是否连接了(a,b)或(b,a),然后删除边缘,添加一个新的边缘。在我看来,我应该只是能够更新重量。
注意:我确实需要多图,因为我在节点之间使用不同类型的边(使用 key 进行区分)
答案 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}