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