словарь Python с постоянным значением типа - PullRequest
3 голосов
/ 31 мая 2010

Я наткнулся на случай, когда мне нужен большой (= огромный) словарь Python, который оказался довольно трудоемким. Однако, поскольку все значения относятся к одному типу (long), а также к ключам, я подумал, что я могу использовать для значений массив python (или numpy, это не имеет значения); и оберните необходимый интерфейс (in: x; out: d [x]) объектом, который фактически использует эти массивы для хранения ключей и значений.

Я могу использовать объект преобразования индекса (input -> index, 1..n, где n - счетчик разных значений) и вернуть массив [index]. Я могу подробно рассказать о некоторых методах реализации таких методов индексации с разумным требованием к памяти, это работает и даже довольно хорошо. Однако мне интересно, существует ли такой объект структуры данных, который уже существует (в python или перенесен в python из C / ++) в любом пакете (я проверял коллекции и некоторые поиски в Google).

Любой комментарий будет приветствоваться, спасибо.

Ответы [ 2 ]

2 голосов
/ 31 мая 2010

Этот тип задачи является типичным доступом к базе данных (большой объем данных в столбцах заданного типа). Вы бы создали простую таблицу с индексированными ключами для быстрого доступа. У меня нет опыта работы с ним, но вы можете проверить стандартный sqlite3 модуль.

Если ваши ключи не меняются со временем, вы можете альтернативно поместить все свои данные в два оптимизированных для памяти массива Python (стандартный модуль array); один массив содержит отсортированные ключи, а другой - соответствующие значения. Затем вы можете найти ключевые индексы с помощью оптимизированной функции bisect.bisect.

0 голосов
/ 31 мая 2010

Вы можете попробовать использовать std :: map. Boost.Python предоставляет упаковку Python для std :: map из коробки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...