处理Python中大型词典列表的最佳方法

时间:2015-08-29 18:02:41

标签: python dictionary

我正在执行统计测试,该测试使用10,000个排列作为空分布。

每个排列都是10,000个密钥字典。每个关键词都是一个基因,每个值都是一组对应基因的患者。该字典是以编程方式生成的,可以写入文件并从文件读入。

我希望能够迭代这些排列以执行我的统计测试;但是,将这个大型列表保留在堆栈上会降低我的性能。

有没有办法将这些词典保存在存储的内存中,并在迭代它们时产生排列?

谢谢!

1 个答案:

答案 0 :(得分:2)

这是一个普遍的计算问题;你想要内存存储数据的速度,但没有足够的内存。您至少有以下选项:

  • 购买更多内存(显然)
  • 让流程互换。这使得OS可以决定将哪些数据存储在磁盘上以及将哪些数据存储在内存中
  • 不要立即将所有内容加载到内存中

由于您正在迭代数据集,因此一种解决方案可能是懒惰地加载数据:

def get_data(filename):
    with open(filename) as f:
        while True:
            line = f.readline()
            if line:
                yield line
            break

for item in get_data('my_genes.dat'):
    gather_statistics(deserialize(item))

一种变体是将数据拆分为多个文件或将数据存储在数据库中,这样您就可以一次批量处理数据。