我有一个大字典映射键(它是字符串)到对象。我腌制了这本大字典,但在某些时候我只想从中抽出一些条目。该词典通常有数千个条目。当我使用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]
我注意到加载整个pickle可能需要3-4秒,这是我不需要的,因为我稍后只访问字典条目的一小部分(如上所示)。
我怎样才能使它成为pickle只加载字典中的那些条目,以加快速度?
感谢。
答案 0 :(得分:3)
答案 1 :(得分:1)
你必须拥有“幽灵”物品,即。仅占位符的对象,并在访问时加载自身。这是一个难题,但已经解决了。你有两个选择。您可以使用ZODB中的持久性库,这有助于此。或者,您只是直接开始使用ZODB;问题解决了。
答案 2 :(得分:0)
如果你的对象彼此独立,你可以使用它们的密钥作为文件名单独地挑选和取消它们,以某种反常的方式,目录是一种将文件名映射到文件的字典。这样,只加载相关条目很简单。
基本上你使用内存字典作为缓存,如果搜索到的密钥丢失,请尝试从文件系统加载文件。
我并不是说你应该这样做。数据库(ZODB,SQLite,其他)可能更适合持久存储。