Я хотел бы хранить некоторые данные в Python в форме, подобной словарю: {1:'a', 2:'b'}
. Каждое значение будет уникальным не только среди других значений, но и среди ключей.
Существует ли простая структура данных, которую я могу использовать, чтобы получить соответствующий объект, независимо от того, спрашиваю ли я, используя «ключ» или «значение»? Например:
>>> a = {1:'a', 2:'b'}
>>> a[1]
'a'
>>> a['b']
2
>>> a[3]
KeyError
'Ключи' - это стандартные значения Python, а значения - короткие (<256чар) строки. </p>
Мое текущее решение - создание обратного словаря и поиск по нему, если я не могу найти результат в исходном словаре:
pointsreversed = dict((v, k) for k, v in points.iteritems())
def lookup(key):
return points.get(key) or pointsreversed.key()
Это занимает вдвое больше места, что не очень хорошо (мои словари могут быть до нескольких сотен мегабайт) и в среднем на 50% медленнее.
РЕДАКТИРОВАТЬ: как уже упоминалось в нескольких ответах, два диктата не удваивают использование памяти, поскольку дублирование - это только словарь, а не элементы внутри.
Есть ли решение, которое улучшает это?