Возможно ли превратить список/кортеж в словарь таким образом?
Сам вопрос:
Есть список или кортеж: 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)]}