Как сохранить декартово произведение в словарь?
Как можно из данного вида [(1,2),(1,3),(2,3)] получить {1:[2,3], 2:[1,3], 3:[1,2]}?
Нужно для реализации поиска в глубину графа, где чаще все используют словарь в качестве параметра функции. Всевозможные пары точек я создал с помощью itertools.permutations, но мне нужно сохранить все данные значения в dict. Из какой "точки" я могу попасть в другую, то есть, например, я могу из A попасть и в B, и в C. Следовательно в словаре должно появиться значение A:[B,C]
import itertools
n = int(input('Введите количество вершин '))
digits_for_dict = [x for x in range(1, n+1)]
lst = list(itertools.permutations([x for x in range(1,n+1)], 2))
d = dict.fromkeys(digits_for_dict, list)
print(lst)
Если использовать встроенный dict, то теряются все "значения".
n = int(input('Введите количество вершин '))
lst = dict(itertools.permutations([x for x in range(1,n+1)], 2))
print(lst)
{1: 3, 2: 3, 3: 2}
Со словарями вообще не работал, первый опыт.... Хочу взять код для поиска в глубину из данного видео: https://youtu.be/99AJrUyLvLQ
Ответы (2 шт):
Попробуйте вот так:
d = {}
for i, j in lst:
if i not in d.keys():
d[i] = [j]
else:
d[i].append(j)
print(d)
itertools и zip помогут:
from itertools import product, count
n = int(input('Введите количество вершин '))
d = {a: list(b) for a, b in zip(count(1), product(range(1,n+1), repeat=2))}
print(d)