内存友好的Python Dict密钥管理

时间:2017-04-03 12:57:27

标签: python dictionary memory-management

我在以下字典更新中获得Memory Error

for x in depot:
    if x in self.xx:
        self.xx[x] += 1
    else:
        self.xx[x] = 1

它在self.xx[x] = 1行给我错误。
我假设背后正在进行重新初始化......

如何在不使用数据库结构的情况下以内存友好的方式解决此问题? 目前我正在研究Trie structure,它是无用的,还是你认为它可以帮助我?

2 个答案:

答案 0 :(得分:2)

您的问题必须来自您的软件仓库的大小(我假设是一个列表)。您尝试迭代所有这些并且对于每次迭代,您检查整个 self.xx字典(如果它包含x,这可能会导致您的内存错误。

您可以尝试使用优化后的Counter集合来解决此问题:

from collections import Counter

self.xx = Counter(depot)

现在self.xx是一个字典,每个键都是与软件仓库不同的值,它的相应值是软件仓库中出现的总和

例如:

depot = ["x", "c", "b", "x", "c", "c", "x", "b", "x", "x", "c", "x", "b"]
self.xx = Counter(depot)
for item in self.xx:
    print("{}: {}".format(item, self.xx[item]))

将打印:

b: 3
x: 6
c: 4

答案 1 :(得分:-1)

您是否考虑在self.xx中使用defaultdict

您的代码看起来有点像这样:

self.xx = defaultdict(int)
for x in depot:
    self.xx[x] += 1