使用Python中的pickle从字典中访问项目

时间:2010-12-22 19:44:36

标签: python pickle

我有一个大字典映射键(它是字符串)到对象。我腌制了这本大字典,但在某些时候我只想从中抽出一些条目。该词典通常有数千个条目。当我使用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只加载字典中的那些条目,以加快速度?

感谢。

3 个答案:

答案 0 :(得分:3)

Pickle序列化对象(hierachies),它不是磁盘存储。如您所见,您必须将整个对象拆开才能使用它 - 这当然是浪费。使用shelvedbm或数据库(SQLite)进行磁盘存储。

答案 1 :(得分:1)

你必须拥有“幽灵”物品,即。仅占位符的对象,并在访问时加载自身。这是一个难题,但已经解决了。你有两个选择。您可以使用ZODB中的持久性库,这有助于此。或者,您只是直接开始使用ZODB;问题解决了。

http://www.zodb.org/

答案 2 :(得分:0)

如果你的对象彼此独立,你可以使用它们的密钥作为文件名单独地挑选和取消它们,以某种反常的方式,目录是一种将文件名映射到文件的字典。这样,只加载相关条目很简单。

基本上你使用内存字典作为缓存,如果搜索到的密钥丢失,请尝试从文件系统加载文件。

我并不是说你应该这样做。数据库(ZODB,SQLite,其他)可能更适合持久存储。