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