我有一个大字典将键(字符串)映射到对象。我腌制了这本大字典,有时我只想从中取出少数条目。该词典通常总共有数千个条目。当我使用pickle加载字典时,如下:
from cPickle import *
# my dictionary from pickle, containing thousands of entries
mydict = open(load('mypickle.pickle'))
# accessing only handful of entries here
for entry in relevant_entries:
# find relevant entry
value = mydict[entry]
Run Code Online (Sandbox Code Playgroud)
我注意到加载整个 pickle 可能需要 3-4 秒,但我不需要,因为稍后我只访问字典条目的一小部分(如上所示)。
我怎样才能使pickle只加载我从字典中获得的那些条目,以使其更快?
谢谢。
如果您的对象彼此独立,您可以使用它们的密钥作为文件名单独对它们进行 pickle 和 unpickle,以某种反常的方式,目录是一种将文件名映射到文件的字典。这样就可以很简单地仅加载相关条目。
基本上,您使用内存字典作为缓存,如果搜索到的键丢失,请尝试从文件系统加载文件。
我并不是真的说你应该这样做。数据库(ZODB、SQLite 等)可能更适合持久存储。