Networkx: как выбрать все ребра, имеющие заданное значение ключа? - PullRequest
0 голосов
/ 18 января 2020

С помощью networkx и для мультиграфа, как выбрать все ребра с заданным значением ключа?

Например, как я могу выбрать все ребра с помощью key==2?

import networkx as nx

G=nx.MultiDiGraph()

G.add_edge(1,2,key=0)
G.add_edge(1,2,key=1)
G.add_edge(1,2,key=2)
G.add_edge(2,3,key=0)
G.add_edge(2,3,key=1)
G.add_edge(2,3,key=2)
G.add_edge(3,4,key=0)
G.add_edge(3,5,key=1)
G.add_edge(3,6,key=2)

#For Example:
#edges with key=2
#(1,2)
#(2,3)
#(3,6)
#Nodes linked to edges with key=2
#1,2,3,6

После поиска я использую решение, предложенное avaris на topi c: Какова правильная структура данных графа, чтобы различать узлы с одинаковыми именами?

Но я предполагаю, что быть более прямым решением.

Извините, что не добавил пример кода в мою первую запись.

1 Ответ

1 голос
/ 19 января 2020

Вы ищете что-то вроде этого:

print("All edges with key 2:",
      [(i, j, k)   for i, j, k in G.edges if k == 2])
print("All nodes connected to edges with key 2:",
      set( [n for i, j, k in G.edges if k == 2  for n in [i, j]] ))

Вывод:

All edges with key 2: [(1, 2, 2), (2, 3, 2), (3, 6, 2)]
All nodes connected to edges with key 2: {1, 2, 3, 6}
...