Словарь на основе базы данных с произвольными ключами - PullRequest
0 голосов
/ 18 мая 2010

Модуль полки python, кажется, разрешает только строковые ключи. Есть ли способ использовать произвольно набранные (например, цифровые) ключи? Может быть словарь с поддержкой sqlite?

Спасибо!

Ответы [ 4 ]

1 голос
/ 18 мая 2010

Вы можете сериализовать на лету (через pickle или cPickle, как это делает shelve.py) каждый ключ, а также каждое значение. На самом деле не стоит создавать подклассы shelve.Shelf, так как вам придется создавать подклассы почти для каждого метода - на этот раз я бы рекомендовал скопировать shelve.py в свой собственный модуль и отредактировать его в соответствии с требованиями. Это в основном похоже на кодирование вашего нового модуля с нуля, но вы получите рабочий пример, чтобы показать вам структуру и рекомендации; -).

sqlite не имеет реального преимущества в достаточно общем случае (где ключи могут быть, например, произвольными кортежами, различной арности и типа для каждой записи) - вам все равно придется сериализовать ключи, чтобы сделать их однородна. Тем не менее, ничто не мешает вам использовать sqlite, например, хранить несколько «обобщенных полок» в одном файле (разные таблицы одной и той же базы данных sqlite) - если вы заботитесь о производительности, вам следует измерять ее каждый раз.

1 голос
/ 18 мая 2010

Почему бы не преобразовать ваши ключи в строки? С помощью цифровых клавиш это сделать довольно легко.

0 голосов
/ 27 августа 2017

Я получил подкласс DbfilenameShelf из shelve -модуля. Я сделал полку, которая автоматически преобразует не строковые ключи в строковые ключи и возвращает их в исходном виде при запросе. Он хорошо работает для стандартных неизменяемых объектов Python: int, float, string, tuple, boolean.

Можно найти в: https://github.com/North-Guard/simple_shelve

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

Я думаю, вы хотите перегрузить оператор []. Вы можете сделать это, определив метод __getitem__.

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