|
1
5
这并不是就地完成的,而是使用popItem()使用olddict
我有一种感觉,除非大小增加,否则dict的大小永远不会调整,因此您可能需要定期添加+删除一个虚拟项。见 Shrinkage rate
|
|
|
2
2
如果算法正确的话,在现代机器上,可能需要数百万个条目来耗尽RAM。假设这样,您必须使用一些持久性存储,以便数据一次只处理块。为什么不使用带有2列的简单数据库表来存储dict?
然后,您可以使用任一列作为键,方法是选择
|
|
3
1
实际上,我看不出你当前算法的内存使用有任何改进。您确实使用迭代器,而不是直接创建新的列表/字典,因此唯一重要的内存使用来自原始字典和新的反向字典。 如果您没有足够的RAM来使用实际使用的字典来运行这个算法,那么我所能想到的就是避免将原来的dict和颠倒的dict同时保存在内存中。一种方法是在将项目添加到倒置的dict时从原始dict中删除项目,可以这样做:
(注意我也用过
如果您想在算法完成后保持原始字典和反向字典都可用,我所能想到的就是将它们存储在磁盘文件中,并找到某种方法一次只加载一个片段。我不知道有什么标准的python模块能够将dict存储到磁盘上,一次只加载其中的一部分,所以您可能需要为此编写自己的代码。 |
|
|
4
0
我没有直接的答案。这是我的一些想法。
|