Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 23, 2014 09:18:40

prizrak-pro
Зарегистрирован: 2013-10-09
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Списки или словари - что использовать для решения задачи.

Существуют имена привязанные к номерам (идентификаторам).
Задача состоит в том, что бы в одном случаи искать по имени идентификатор. А в другом по идентификатору искать имя.
В начале пытался решить это с помощью списков, но как оказалось в списке можно искать, получить значение, только по ключу (думал, что можно как в php искать ключ по значению).

Возникает 2 варианта.
1) использовать 2 словаря.
2) использовать 2 списка, но тут нужно следить, что бы под одним номером в разных списках были соотносимые значение (хотя это не сложно).

Вопрос. Что менее затратно. 1 вариант представляется мне более безопасным, но насколько он оправдан в решении данной задачи и не слишком ли затратный.

Возможно есть ещё какие то варианты решения.

(можно хранить в базе и получать значение поиском при необходимости, но не хочу каждый раз обращаться в базе)

Офлайн

#2 Апрель 23, 2014 09:28:23

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Списки или словари - что использовать для решения задачи.

prizrak-pro
можно хранить в базе и получать значение поиском при необходимости
И это правильно, зачем дублировать информацию?
Если размер оперативки позволяет, создайте таблицу в памяти.



Офлайн

#3 Апрель 23, 2014 12:47:43

prizrak-pro
Зарегистрирован: 2013-10-09
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Списки или словари - что использовать для решения задачи.

Согласен с базой удобнее. Но если это частые смены. И будет очень много обращений в базе. И хочется держать в переменной. Что же удобнее?

Офлайн

#4 Апрель 23, 2014 13:57:45

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Списки или словари - что использовать для решения задачи.

База, которая работает в памяти. Если данные напоминают словарь - то гляньте в сторону redis. Она достаточно быстрая и кошерная Если лень в нем разбираться, то можно запихать в память и sqlite…

Офлайн

#5 Апрель 23, 2014 16:25:56

prizrak-pro
Зарегистрирован: 2013-10-09
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Списки или словари - что использовать для решения задачи.

Спасибо, посмотрю.

Офлайн

#6 Апрель 23, 2014 23:32:00

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Списки или словари - что использовать для решения задачи.

prizrak-pro
В начале пытался решить это с помощью списков, но как оказалось в списке можно искать, получить значение, только по ключу (думал, что можно как в php искать ключ по значению).
это словарь, а не список

а вот если взять список пар, тогда можно получить поиск O(n)

>>> 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)

Офлайн

#7 Апрель 24, 2014 14:32:23

prizrak-pro
Зарегистрирован: 2013-10-09
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Списки или словари - что использовать для решения задачи.

py.user.next, спасибо огромное! То что нужно. Как просто, как сам не догадался

4kpt_II, Redis и в правду интересная система. И ходя мне для решения полностью подойдет пример py.user.next. По redis почитал и очень понравилась. Будет посложнее задача, попробую использовать Redis. Спасибо большое.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version