在多重图中,每次调用 *add_edge(a,b,weight=1)* 都会在节点 a 和 b 之间添加一条新边。构建图时,是否可以在再次找到a 和b 时修改此权重。现在我要检查 (a, b) 或 (b, a) 是否连接,然后必须删除边缘,并添加一个新边缘。在我看来,我应该能够简单地更新权重。
注意:我确实需要多图,因为我在节点之间使用不同类型的边(使用键区分)
最佳答案
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}
关于python - 更改 networkx 多图中的边属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9469515/