python shelf模块似乎只允许字符串键。有没有办法使用任意类型(例如数字)键?可能是一个sqlite支持的字典?
谢谢!
答案 0 :(得分:1)
为什么不将密钥转换为字符串?使用数字键很容易做到这一点。
答案 1 :(得分:1)
您可以动态序列化(通过pickle
或cPickle
,如shelve.py
),每个键以及每个值。由于你必须对几乎所有方法进行子类化,所以并不值得对shelve.Shelf
进行子类化 - 一次,我建议将shelve.py
复制到你自己的模块中并编辑它以适应。这基本上就像从头开始编写新模块,但是你会得到一个工作示例来向你展示结构和指南; - )。
sqlite
在一个足够普遍的情况下没有真正的优势(其中键可以是例如任意元组,每个条目的不同arity和类型) - 你将不得不序列化键到让它们变得同质但是,没有什么可以阻止您使用sqlite
,例如将几个“通用货架”保存到一个文件中(同一个sqlite数据库的不同表) - 如果你关心性能,你应该单向测量它。
答案 2 :(得分:0)
我认为你想重载[]运算符。您可以通过定义__getitem__
方法来实现。
答案 3 :(得分:0)
我最终从DbfilenameShelf
- 模块中继承了shelve
。我做了一个架子,它自动将非字符串键转换为字符串键,并在查询时以原始形式返回它们。它适用于Python的标准不可变对象:int,float,string,tuple,boolean。