首页 > 解决方案 > networkx:从多重图中删除具有特定属性的边

问题描述

我想从 MultiGraph 中删除特定的边(特定颜色)。

我怎样才能做到这一点?

以下代码不起作用。

#!/usr/bin/env python
import matplotlib.pyplot as plt
import networkx as nx

G = nx.MultiGraph()
# the_colored_graph.add_edge(v1, v2, "red")
G.add_edge(1, 2, color="red")
G.add_edge(2, 3, color="red")
G.add_edge(4, 2, color="green")
G.add_edge(2, 4, color="blue")

print (G.edges(data=True))

# G.remove_edge(2, 4, color="green")
#
selected_edge = [(u,v) for u,v,e in G.edges(data=True) if e['color'] == 'green']
print (selected_edge)
G.remove_edge(selected_edge[0][0], selected_edge[0][1])

print (G.edges(data=True))

nx.draw(G)
plt.show()

标签: networkx

解决方案


在构建多重图时,为每条边分配一个“关键”属性(关键可以是消除平行边歧义的任何东西 - 例如颜色):

G.add_edge(1, 2, color="red", key='red')

通过指定结束节点和键来删除边:

G.remove_edge(1, 2, key='red')

推荐阅读