在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 个回答
2
你需要有“幽灵”对象,也就是那些只是占位符的对象,只有在被访问时才会加载自己。这是一个比较棘手的问题,但已经有了解决办法。你有两个选择。你可以使用ZODB的持久化库,它可以帮助你解决这个问题。或者,你也可以直接开始使用ZODB,这样问题就解决了。
0
如果你的对象之间是相互独立的,你可以把它们单独保存和读取,使用它们的键作为文件名。可以说,文件夹在某种程度上就像一个字典,把文件名和文件对应起来。这样的话,你就可以很简单地只加载相关的内容。
基本上,你可以把内存中的字典当作缓存,如果你要找的键不在里面,就去文件系统中加载相应的文件。
我并不是说你一定要这么做。其实使用数据库(比如ZODB、SQLite等)来存储数据可能会更好。