У меня есть алгоритмическая проблема с использованием словаря списков Python3.x, хотя, возможно, более подходящей является другая структура данных.
Допустим, у меня есть следующий словарь Python:
dict1 = {1:[4, 12, 22], 2:[4, 5, 13, 23], 3:[7, 15, 25]}
Ключ 1
, связанный со значением [4, 12, 22]
, означает, что 1 «связан с» 4. 1 также связан с 12, а 1 связан с 22. Также 2 связан с 4, 2 связан с 5, 2 связаны с 13, 1 связаны с 23 и т. Д.
Мой вопрос, для этого небольшого примера, как мне «развернуть» этот словарь так, чтобы каждый элемент списка значений кодировал эту «ассоциацию»?
То есть конечный результат должен быть:
intended_dict = {1:[4, 12, 22], 2:[4, 5, 13, 23], 3:[7, 15, 25],
4:[1, 2], 5:[2], 12:[1], 13:[2], 15:[3], 22:[1], 23:[2], 25:[3]}
потому что 4 ассоциируется с 1, 4 ассоциируется с 2, 5 ассоциируется с 2 и т. Д.
Есть ли способ "развернуть" подобные словари?
Как бы это масштабировалось до гораздо большего словаря с большими списками с миллионами целых чисел?
Возможно, другая структура данных будет более эффективной, особенно с гораздо большими списками?
РЕДАКТИРОВАТЬ: Учитывая размер фактического словаря, с которым я работаю (не того, который был опубликован выше), решение должно быть максимально эффективным с точки зрения памяти / производительности.