Python NetworkX:如何在多有向图中反转有向边?

Python NetworkX:如何在多有向图中反转有向边?,python,networkx,directed-graph,Python,Networkx,Directed Graph,问题:如何在Networkx MultiDiGraph中反转边(即反转边的节点) 上下文:我有一个表示配水网络的图表,我试图找到流量回路(水离开一个点并到达同一点,例如在泵中循环泵送)。为此,我有一个网络的有向多向图表示(u、v、名称)和一个按边名称列出的流列表,并试图通过翻转与负流管道对应的边来确保边的方向与流的方向相对应 然而,我找不到一种基于属性(即通过边缘的流)反转边缘节点的简单方法。关于如何做到这一点,或者用一种更聪明的方式来完成我想做的事情,你有什么想法吗 我读过一篇文章,其中建议删

问题:如何在Networkx MultiDiGraph中反转边(即反转边的节点)

上下文:我有一个表示配水网络的图表,我试图找到流量回路(水离开一个点并到达同一点,例如在泵中循环泵送)。为此,我有一个网络的有向多向图表示(u、v、名称)和一个按边名称列出的流列表,并试图通过翻转与负流管道对应的边来确保边的方向与流的方向相对应

然而,我找不到一种基于属性(即通过边缘的流)反转边缘节点的简单方法。关于如何做到这一点,或者用一种更聪明的方式来完成我想做的事情,你有什么想法吗


我读过一篇文章,其中建议删除并重新添加具有相同属性但反向节点的边,但我无法使用多向图。谢谢。

NetworkX API不包含反转单个边的函数。删除有向边然后添加反向边的方法将适用于
多向图
,如下所示

在多有向图中反转有向边
从复制导入deepcopy
将networkx导入为nx
def反向_边(图形、节点1、节点2):
对于键,图形中的数据。获取边数据(节点1,节点2)。项()
添加边(节点2,节点1,key=key,**(deepcopy(数据)))
图.删除_边(节点1、节点2)
G=nx.multi-digraph()
G.添加_边(1,2,重量=0.5,颜色='蓝色')
G.添加_边(3,4,重量=1.0,颜色为红色)
反向_边(G,1,2)
打印(G.边缘(数据=真))
输出
[(2, 1, {'weight': 0.5, 'color': 'blue'}), (3, 4, {'weight': 1.0, 'color': 'red'})]