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

Jon*_* Lu 7 python dictionary

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

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

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

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

谢谢!

Eri*_*and 2

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

  • 购买更多内存(显然)
  • 让进程交换。这让操作系统决定将哪些数据存储在磁盘上以及将哪些数据存储在内存中
  • 不要一次将所有内容加载到内存中

由于您正在迭代数据集,一种解决方案可能是延迟加载数据:

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))
Run Code Online (Sandbox Code Playgroud)

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