我正在尝试写一个字谜服务。该程序的第一个阶段是浏览单词字典并创建一个Python字典,其中包含字长和单词长度值的键,即:
def processedDictionary():
d = defaultdict(list)
f = open(dictionaryFile, "r")
f.close()
for line in lines:
length = len(line)
d[length].append(line)
return d
这意味着只需要将anagram词与相同长度的词进行比较,processedDictionary()[length]
可以加快脚本速度。但是,我试图进一步优化脚本,因为每次有人用单词拼写时,字典必须被“处理”是愚蠢的,所以我每次都看着pickle加载已排序的字典:
def processedDictionary():
file = open("dic.obj",'rb')
object_file = pickle.load(file)
file.close()
return object_file
dic.obj
是已处理字典的2MB转储。但是,即使使用cPickle,pickle字典的加载速度也是原始脚本的两倍!任何人都可以建议我在这里缺少什么以及优化字典加载的正确途径是什么?
答案 0 :(得分:3)
当您转储数据时,请确保指定要使用的协议:
with open('dict.obj', 'wb') as fh:
pickle.dump(obj, fh, pickle.HIGHEST_PROTOCOL)
加载时,如果切换到Python 3(如果可能的话),你应该看到速度不合适。
with open('dict.obj', 'rb') as fh:
return pickle.load(fh)
还建议将腌制文件存储在单独的介质上。 因为从同一设备运行所有内容会减慢阅读过程。