python中shelf对象_python中允许元组作为键的对象存储

shelve是Python标准库中的一个模块。文档对此很清楚:值(不是键!)工具架中可以是任意的Python对象—pickle模块可以处理的任何对象。。。键是普通的字符串

根据构造,shelve只接受字符串作为键。在

根据pypi提供的文档,swess仍然处于Beta测试阶段,我看不到任何证据表明它支持的是键的字符串之外的任何东西(错误object has no attribute 'rstrip'我们认为它不支持)。在

如果我是你,我会坚持使用众所周知的shelve,并用一个键序列化层来包装它。正如padraiccunningham所建议的,pickle应该可以完成这项工作。在

以下是一个(未经广泛测试)可能的实现:class tuple_dict(collections.MutableMapping):

class iterator(collections.Iterator):

def __init__(self, d):

self.it = d.udict.__iter__()

def __iter__(self):

return self

def next(self):

return pickle.loads(next(self.it))

def __init__(self, udict):

self.udict = udict

def __getitem__(self, key):

ukey = pickle.dumps(key)

return self.udict[ukey]

def __setitem__(self, key, value):

ukey = pickle.dumps(key)

self.udict[ukey] = value

def __delitem__(self, key):

ukey = pickle.dumps(key)

del self.udict[ukey]

def keys(self):

return [ pickle.loads(key) for key in self.udict.keys() ]

def __iter__(self):

return self.iterator(self)

def __len__(self):

return len(self.udict)

def __contains__(self, key):

return pickle.dumps(key) in self.udict

def sync(self):

self.udict.sync()

def close(self):

self.udict.close()

你可以这样使用它:

^{pr2}$

然后,d将接受元组作为键,并将它们存储在底层的shelf中。在

注意:如果您以后想使用不同的持久性实现,前提是该实现是一个映射(类dict),那么您可以通过简单地更改close和sync方法(shelve specific)重用tuple_dict,但是其他实现需要什么。事实上,除了这两种方法之外,tuple-u-dict只是包装了一个普通的dict,因此任何映射类。。。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值