2 回答

TA贡献1858条经验 获得超8个赞
字符串看起来是十六进制的。在这种情况下,您可以首先使用binascii.unhexlify将它们转换为二进制字符串。这样就节省了 50% 的空间。
In [2]: import binascii
In [3]: binascii.unhexlify('36ae99662ec931a3c20cffdecb39b69a8f7f23fd')
Out[3]: b'6\xae\x99f.\xc91\xa3\xc2\x0c\xff\xde\xcb9\xb6\x9a\x8f\x7f#\xfd'
In [4]: len(binascii.unhexlify('36ae99662ec931a3c20cffdecb39b69a8f7f23fd'))
Out[4]: 20
2000 万个键/值对对于现代计算机来说并不算多。查看纯数据的大小(字符串为 20 个字节,整数为 4 个字节),我们谈论的是大约半 GB。
In [5]: 20e6 * (20 + 4) / 1e9
Out[5]: 0.48
最节省空间的方法是只创建一个键/值对数组,按键排序。因为我们知道每对都是 24 字节,所以在映射文件中访问它们是微不足道的;你可以只使用切片。我会使用二进制搜索进行查找。
这没有存储开销。但是插入一个值将是低效的。

TA贡献1946条经验 获得超4个赞
考虑到您的第二个字典与第一个字典相反,我认为您可能想要使用单表数据库。您可以有一个主键,然后在字符串上建立一个索引,以便快速查找。像 sqlite 这样的东西是有道理的。
你正在处理什么大小的内存?它可能仍然在 python 的内存中,但这一切都取决于你有多少内存。
添加回答
举报