如何在Python中保存大字典(不是巨大的)?

4 投票
5 回答
1479 浏览
提问于 2025-04-17 12:47

我的字典里会有几千个键,每个键对应一个1000x1000的numpy数组作为值。我不需要这个文件能被人看懂,文件小一点、加载快一点更重要。

我最开始试了savemat,但是遇到了一些问题。用Pickle保存的文件太大了。我想csv也差不多。我看到有人推荐用json(可读的文本,可能也很大)或者数据库(听起来可能比较复杂)。在我的情况下,你有什么建议吗?

5 个回答

2

numpy.savez 呢?这个方法可以保存多个numpy数组,而且它们是以二进制格式保存的,所以应该比用pickle保存要快。

3

文件系统本身其实是一个常常被忽视的数据结构。你可以把它想象成一个字典,这个字典把你的键(也就是你用来查找的名字)和文件名对应起来。然后每个文件里面就存放着一个1000x1000的数组。把这个字典保存起来是很快很简单的,而数据文件里就可以直接放原始数据(这部分数据numpy可以很容易地加载)。

6

如果你有一个字典,里面的键是字符串,而值是数组,像这样:

>>> import numpy
>>> arrs = {'a': numpy.array([1,2]),
            'b': numpy.array([3,4]),
            'c': numpy.array([5,6])}

你可以使用 numpy.savez 把它们按键保存到一个压缩文件里:

>>> numpy.savez('file.npz', **arrs)

要把它加载回来:

>>> npzfile = numpy.load('file.npz')
>>> npzfile
<numpy.lib.npyio.NpzFile object at 0x1fa7610>
>>> npzfile['a']
array([1, 2])
>>> npzfile['b']
array([3, 4])
>>> npzfile['c']
array([5, 6])

撰写回答