У меня есть проблема, которая требует обратимого отображения ключей к значениям 1:1.
Это означает, что иногда я хочу найти значение, заданное ключом, но в других случаях я хочу найти ключ с учетом значения. Оба ключа и значения гарантированы уникальными.
x = D[y]
y == D.inverse[x]
Очевидное решение состоит в том, чтобы просто инвертировать словарь каждый раз, когда я хочу обратный поиск. Инвертирование словаря очень просто, там рецепт здесь, но для большого словаря он может быть очень медленно.
Другой альтернативой является создание нового класса, который объединяет два словаря, по одному для каждого вида поиска. Это, скорее всего, будет быстрым, но будет использовать вдвое больше памяти, чем один дикт.
Итак, есть ли лучшая структура, которую я могу использовать?
- Мое приложение требует, чтобы это было очень быстро и использовало как можно меньше памяти.
- Структура должна быть изменчивой, и очень желательно, чтобы мутация объекта не приводила к ее замедлению (например, для принудительного полного переиндекса).
- Мы можем гарантировать, что либо ключ, либо значение (или оба) будут целыми
- Вероятно, структура будет необходима для хранения тысяч или, возможно, миллионов элементов.
- Ключи и Valus гарантированно будут уникальными, т.е. len (set (x)) == len (x) для x в [D.keys(), D.valuies()]