Python – как я могу извлечь весь кратчайший путь из этого сетевого кода?

Я попытался запустить это, и я получаю кратчайший путь с адресом памяти. Как я могу удалить адрес памяти из вывода

import networkx as nx
G=nx.Graph()
G.add_nodes_from([1,2,3,4])
G.add_weighted_edges_from([(1,2,8),(1,3,5),(2,4,1),(3,4,2)])
print(nx.floyd_warshall(G))

Вот результат

{1: defaultdict(<function floyd_warshall_predecessor_and_distance.<locals>.<lambda>.<locals>.<lambda> at 0x000002AA0C397B70>, {1: 0, 2: 8, 3: 5, 4: 7}), 
`2: defaultdict(<function floyd_warshall_predecessor_and_distance.<locals>.<lambda>.<locals>.<lambda> at 0x000002AA0D96A378>, {1: 8, 2: 0, 3: 3, 4: 1}),
3: defaultdict(<function floyd_warshall_predecessor_and_distance.<locals>.<lambda>.<locals>.<lambda> at 0x000002425C098F28>, {1: 5, 2: 3, 3: 0, 4: 2}),
4: defaultdict(<function floyd_warshall_predecessor_and_distance.<locals>.<lambda>.<locals>.<lambda> at 0x000002425C0A2048>, {1: 7, 2: 1, 3: 2, 4: 0})}

Результат, который я хочу, выглядит примерно так:

1:{1:0, 2:8, 3:5, 4:7}
2:{1:8, 2:0, 3:3, 4:1}
3:{1:5, 2:3, 3:0, 4:2}
4:{1:7, 2:1, 3:2, 4:0}

person Vishal Agrawal    schedule 27.02.2017    source источник


Ответы (2)


Похоже, это словарь внутри словаря:

Вы можете сделать что-то вроде этого:

data = nx.floyd_warshall(G)

for key, value in data.iteritems():
    print('%s %s' % (key, value.values()))

Или, если вам нужна пара ключ: значение:

import json

data = nx.floyd_warshall(G)

for key, value in data.iteritems():
    print('%s %s' % (key, json.dumps(value)))
person lapinkoira    schedule 27.02.2017

Он печатает словарь defaultdicts (это то, что возвращает networkx), но вы хотите, чтобы он печатал словарь dicts, поэтому вам нужно преобразовать эти defaultdicts в dicts.

X = nx.floyd_warshall(G)
Y = {a:dict(b) for a,b in X.items()}  
print(Y)
> {1: {1: 0, 2: 8, 3: 5, 4: 7},
 2: {1: 8, 2: 0, 3: 3, 4: 1},
 3: {1: 5, 2: 3, 3: 0, 4: 2},
 4: {1: 7, 2: 1, 3: 2, 4: 0}}
person Joel    schedule 27.02.2017
comment
Спасибо Джоэл за ваш ответ. - person Vishal Agrawal; 28.02.2017