Форум сайта python.su
0
Существуют имена привязанные к номерам (идентификаторам).
Задача состоит в том, что бы в одном случаи искать по имени идентификатор. А в другом по идентификатору искать имя.
В начале пытался решить это с помощью списков, но как оказалось в списке можно искать, получить значение, только по ключу (думал, что можно как в php искать ключ по значению).
Возникает 2 варианта.
1) использовать 2 словаря.
2) использовать 2 списка, но тут нужно следить, что бы под одним номером в разных списках были соотносимые значение (хотя это не сложно).
Вопрос. Что менее затратно. 1 вариант представляется мне более безопасным, но насколько он оправдан в решении данной задачи и не слишком ли затратный.
Возможно есть ещё какие то варианты решения.
(можно хранить в базе и получать значение поиском при необходимости, но не хочу каждый раз обращаться в базе)
Офлайн
36
prizrak-proИ это правильно, зачем дублировать информацию?
можно хранить в базе и получать значение поиском при необходимости
Офлайн
0
Согласен с базой удобнее. Но если это частые смены. И будет очень много обращений в базе. И хочется держать в переменной. Что же удобнее?
Офлайн
58
База, которая работает в памяти. Если данные напоминают словарь - то гляньте в сторону redis. Она достаточно быстрая и кошерная
Если лень в нем разбираться, то можно запихать в память и sqlite…
Офлайн
0
Спасибо, посмотрю.
Офлайн
857
prizrak-proэто словарь, а не список
В начале пытался решить это с помощью списков, но как оказалось в списке можно искать, получить значение, только по ключу (думал, что можно как в php искать ключ по значению).
>>> class KVDict(list): ... ... def findk(self, k): ... for i in self: ... if i[0] == k: ... return i[1] ... ... def findv(self, v): ... for i in self: ... if i[1] == v: ... return i[0] ... >>> d = KVDict([('a', 1), ('b', 2)]) >>> >>> d.findk('b') 2 >>> d.findv(2) 'b' >>> d.findk('a') 1 >>> d.findv(1) 'a' >>>
Отредактировано py.user.next (Апрель 23, 2014 23:33:06)
Офлайн
0
py.user.next, спасибо огромное! То что нужно. Как просто, как сам не догадался
4kpt_II, Redis и в правду интересная система. И ходя мне для решения полностью подойдет пример py.user.next. По redis почитал и очень понравилась. Будет посложнее задача, попробую использовать Redis. Спасибо большое.
Офлайн