Networkx - 获取 Dijkstra 路径中的边属性

Networkx - Get edge properties in Dijkstra path

我有下图

import networkx as nx

g = nx.MultiGraph()

#link 0
g.add_edge("A","B",cost=20,index=0)

#link 1
g.add_edge("A","C",cost=20,index=1)

#link 2
g.add_edge("B","C",cost=10,index=2)

#link 3
g.add_edge("B","D",cost=150,index=3)

#link 4
g.add_edge("C","D",cost=150,index=5)
g.add_edge("C","D",cost=200,index=6)

我正在尝试找到 A 和 D 之间的最短路径并且有效

path=nx.dijkstra_path(g,"A","D",weight='cost')
->['A', 'C', 'D']

我需要的是在此路径中获取边缘信息(更具体的索引)。

尝试了很远:

edgesinpath=zip(path[0:],path[1:])
for (u,v ) in edgesinpath:
    print u,v,g[u][v]

但当然这会超出所有边,计算路径中的 u,v:

A C {0: {'index': 1, 'cost': 20}}
C D {0: {'index': 5, 'cost': 150}, 1: {'index': 6, 'cost': 200}}

知道如何获得正确的信息吗?这可以通过 networkx 获得吗?

谢谢。

一个可能的解决方案:

edges_ids = []
for u,v in edgesinpath:
    edge = sorted(g[u][v], key=lambda x:g[u][v][x]['cost'])[0]
    edges_ids.append(g[u][v][edge]['index'])

这会为每条多边选择成本最低的最短路径中的边。