Печатать элементы словаря в виде списка путей - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь распечатать все возможные пути, используя алгоритм Флойда-Уоршалла и networkx (Python). Дело в том, что я не знаю, как это правильно делать (читается, в виде списка). У меня есть следующие пути из моего графика:

X = nx.floyd_warshall(gra)
Y = {a: dict(b) for a, b in X.items()}
print(Y)

, и он возвращает это:

{(0, 0): {(0, 0): 0, (1, 0): 1, (0, 1): 1, (1, 1): 2, (0, 2): 2, (1, 2): 3}, (1, 0): {(1, 0): 0, (0, 0): 1, (1, 1): 1, (0, 1): 2, (0, 2): 3, (1, 2): 2}, (0, 1): {(0, 1): 0, (0, 0): 1, (1, 1): 1, (0, 2): 1, (1, 0): 2, (1, 2): 2}, (1, 1): {(1, 1): 0, (1, 0): 1, (0, 1): 1, (1, 2): 1, (0, 0): 2, (0, 2): 2}, (0, 2): {(0, 2): 0, (0, 1): 1, (1, 2): 1, (0, 0): 2, (1, 0): 3, (1, 1): 2}, (1, 2): {(1, 2): 0, (1, 1): 1, (0, 2): 1, (0, 0): 3, (1, 0): 2, (0, 1): 2}}

Как я могу преобразовать его в более читаемый формат? Например, можно ли напечатать все возможные пути один за другим? Я хотел бы получить такой результат:

[(0, 0), (1, 0)]
[(1, 0), (1, 1)]
[(0, 0), (1, 0), (1, 1)]
...
[(0, 0), (1, 0), (1, 1), (0, 1), (0, 2), (1, 2)]

В качестве альтернативы, можно ли распечатать их как JSON (или так):

{(0, 0): 
   {(0, 0): 0, 
    (1, 0): 1, 
    (0, 1): 1, 
    (1, 1): 2, 
    (0, 2): 2, 
    (1, 2): 3},  
(1, 0): 
   {(1, 0): 0, 
    (0, 0): 1, 
    (1, 1): 1, 
    (0, 1): 2, 
    (0, 2): 3, 
    (1, 2): 2}, 

[......]

    (0, 1): 2}}

Спасибо ...

1 Ответ

1 голос
/ 17 июня 2020

Для печати Json:

import json


a = {(0, 0): {(0, 0): 0, (1, 0): 1, (0, 1): 1, (1, 1): 2, (0, 2): 2, (1, 2): 3}, (1, 0): {(1, 0): 0, (0, 0): 1, (1, 1): 1, (0, 1): 2, (0, 2): 3, (1, 2): 2}, (0, 1): {(0, 1): 0, (0, 0): 1, (1, 1): 1, (0, 2): 1, (1, 0): 2, (1, 2): 2}, (1, 1): {(1, 1): 0, (1, 0): 1, (0, 1): 1, (1, 2): 1, (0, 0): 2, (0, 2): 2}, (0, 2): {(0, 2): 0, (0, 1): 1, (1, 2): 1, (0, 0): 2, (1, 0): 3, (1, 1): 2}, (1, 2): {(1, 2): 0, (1, 1): 1, (0, 2): 1, (0, 0): 3, (1, 0): 2, (0, 1): 2}}


def dict_key_convert(dic):
    converted = {}
    for key, item in dic.items():
        if isinstance(item, dict):
            sub_dict = dict_key_convert(item)
            converted[str(key)] = sub_dict
        else:
            converted[str(key)] = item

    return converted


# print(json.dumps(dict_key_convert(a), indent=2))
with open('temp.json', 'w') as file:
    json.dump(dict_key_convert(a), file, indent=2)

Результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...