大型字典对象上的python搁置类型错误

大型字典对象上的python搁置类型错误,python,database,performance,bigdata,shelve,Python,Database,Performance,Bigdata,Shelve,我有一个大的dictionary对象dict_tmp,它在RAM系统中占用40GB,总共64GB,它有字符串键和浮点值。我使用d=shelve.openfname、protocol=2和d['dict\u tmp']=dict\u tmp来保存字典,这会产生以下错误: Traceback (most recent call last): File "file.py", line 160, in <module> d['dict_tmp'] = dict_tmp Fil

我有一个大的dictionary对象dict_tmp,它在RAM系统中占用40GB,总共64GB,它有字符串键和浮点值。我使用d=shelve.openfname、protocol=2和d['dict\u tmp']=dict\u tmp来保存字典,这会产生以下错误:

Traceback (most recent call last):
  File "file.py", line 160, in <module>
    d['dict_tmp'] = dict_tmp
  File "/usr/lib/python2.7/shelve.py", line 133, in __setitem__
    self.dict[key] = f.getvalue()
  File "/usr/lib/python2.7/bsddb/__init__.py", line 279, in __setitem__
    _DeadlockWrap(wrapF)  # self.db[key] = value
  File "/usr/lib/python2.7/bsddb/dbutils.py", line 68, in DeadlockWrap
    return function(*_args, **_kwargs)
  File "/usr/lib/python2.7/bsddb/__init__.py", line 278, in wrapF
    self.db[key] = value
TypeError: Data values must be of type string or None.
我相信shelve模块是用于一般python对象的,但我认为这个问题可能与anydbm有关。任何帮助都将不胜感激


撇开问题不谈:如果不按答案和顺序搁置,保存大型词典的最佳方法是什么?非常感谢你

关于链接帖子中提到的其他选项,JSON和SQLite呢?4个问题。口述里有什么?d和dict有什么区别?为什么要调用变量dict?如果你能在一台dict上花费整整40千兆字节,你有多少内存?谢谢@agf,我还没有试过其他选择。Shelve有助于处理一般python对象。我希望这可以在搁置模块中修复,否则我将不得不移动。@user2357112,很抱歉使用python关键字dict-我刚刚根据实际代码重命名了它。我改变了问题以反映你的意见。谢谢我想你可能没有抓住搁置的重点。书架应该是dict的永久替代品——也就是说,您直接将数据存储到书架上,而不是真正的dict,当书架关闭时,您的数据都在磁盘上。如果您想将整个巨型dict从磁盘加载到内存,并在完成后一次将其全部存储回内存,您可以使用cPickle对其进行pickle和unpickle。