Этот тип информации лучше всего представить с помощью графиков:
import networkx as nx
data = {
'50-52': 781445.0,
'52-84': 56554260.0,
'50-73': 31204670.0,
'73-84': 39169560.0,
'73-75' : 23123123.0,
'75-84' : 2312322.0
}
G = nx.DiGraph()
for key, weight in data.items():
src_str, dest_str = key.split('-')
src_idx, dest_idx = int(src_str), int(dest_str)
G.add_edge(src_idx, dest_idx, weight=weight)
start = 50
end = 84
all_paths = list(nx.all_simple_paths(G,
source=start,
target=end))
distances = [sum(G.get_edge_data(s,d)['weight'] for s,d in zip(p,p[1:]))
for p in all_paths]
results = {tuple(p):d for p,d in zip(all_paths,distances)}
print(results)
Результат:
{
(50, 52, 84): 57335705.0,
(50, 73, 84): 70374230.0,
(50, 73, 75, 84): 56640115.0
}
Networkx может быть немного сложным, но о нем определенно стоит узнать!