Возможно ли превратить список/кортеж в словарь таким образом?

Сам вопрос:

Есть список или кортеж: graph.

graph = ((0,10,0,30,100), (0,0,50,0,0), (0,0,0,0,10), (0,0,20,0,60), (0,0,0,0,0))

Или

graph = [[0,10,0,30,100], [0,0,50,0,0], [0,0,0,0,10], [0,0,20,0,60], [0,0,0,0,0]]

Я хочу создать словарь, чтобы воспользоваться Алгоритмом Дейкстры. Словарь должен иметь следующий вид - { вершина: [(стоимость пути, путь к вершине)] }.

graph = {
    0: [(10, 1), (30, 3), (100, 4)],
    1: [(50, 2)],
    2: [(10, 4)],
    3: [(20, 2), (60, 4)],
    4: [(None, None)]
}

Как мне это сделать? Не понимаю. Новичок.

И дополнительный вопрос к вам: правильно ли я понимаю, что ключ [4] будет иметь значение (None, None)? Если вершина [4] никуда не идет.

Заранее спасибо!


Ответы (1 шт):

Автор решения: CrazyElf

Легко. Всё довольно линейно делается, если использовать словарное и списковое сокращение, а также enumerate:

d = {i: [(y,j) for j,y in enumerate(x) if y] or [(None,None)] for i,x in enumerate(graph)}

Результат в d:

{0: [(10, 1), (30, 3), (100, 4)],
 1: [(50, 2)],
 2: [(10, 4)],
 3: [(20, 2), (60, 4)],
 4: [(None, None)]}
→ Ссылка