Скажем, у меня есть 2 словаря, каждый из которых содержит около 100000 записей (каждый может быть разной длины):
dict1 = {"a": ["w", "x"], "b":["y"], "c":["z"] ...}
dict2 = {"x": ["a", "b"], "y":["b", "d"], "z":["d"] ...}
Мне нужно выполнить операцию с использованием этих двух словарей:
- Рассматривать каждый элемент dict как набор сопоставлений (т. Е. Список всех сопоставлений в
dict1
будет "a"->"w"
, "a"->"x"
, "b"->"y"
и "c"->"z"
) - Хранить сопоставления только в
dict1
если обратное отображение существует в dict2
.
В результате получается следующий словарь: {"a": ["x"], "b", ["y"]}
Мое текущее решение использует 2 m*n
все нули данных, где m
и n
- это длины dict1
и dict2
соответственно, метки индекса - это ключи dict1
, а метки столбца - ключи dict2
.
Для первого кадра данных я вставляю 1
в каждое значение, где метка индекса -> метка столбца представляет отображение в dict1
. Для второго фрейма данных я вставляю 1
в каждое значение, где метка столбца -> метка индекса представляет отображение в dict2
.
Затем я выполняю произведение размера элемента между двумя фреймами данных, которое оставляет только значения с отображением "a1"->"x1"
в dict1
и "x1"->"a1"
в dict2
.
Однако это занимает слишком много памяти и очень дорого. Есть ли альтернативный алгоритм, который я могу использовать?