带有任意键的数据库支持的字典

时间:2010-05-17 21:50:25

标签: python

python shelf模块似乎只允许字符串键。有没有办法使用任意类型(例如数字)键?可能是一个sqlite支持的字典?

谢谢!

4 个答案:

答案 0 :(得分:1)

为什么不将密钥转换为字符串?使用数字键很容易做到这一点。

答案 1 :(得分:1)

您可以动态序列化(通过picklecPickle,如shelve.py),每个键以及每个值。由于你必须对几乎所有方法进行子类化,所以并不值得对shelve.Shelf进行子类化 - 一次,我建议将shelve.py复制到你自己的模块中并编辑它以适应。这基本上就像从头开始编写新模块,但是你会得到一个工作示例来向你展示结构和指南; - )。

sqlite在一个足够普遍的情况下没有真正的优势(其中键可以是例如任意元组,每个条目的不同arity和类型) - 你将不得不序列化键到让它们变得同质但是,没有什么可以阻止您使用sqlite,例如将几个“通用货架”保存到一个文件中(同一个sqlite数据库的不同表) - 如果你关心性能,你应该单向测量它。

答案 2 :(得分:0)

我认为你想重载[]运算符。您可以通过定义__getitem__方法来实现。

答案 3 :(得分:0)

我最终从DbfilenameShelf - 模块中继承了shelve。我做了一个架子,它自动将非字符串键转换为字符串键,并在查询时以原始形式返回它们。它适用于Python的标准不可变对象:int,float,string,tuple,boolean。

可在以下网址找到:https://github.com/North-Guard/simple_shelve