在多图中,每次对* 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 Multigraph中的边属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9469515/

10-11 06:22