我在以下字典更新中获得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
,它是无用的,还是你认为它可以帮助我?
答案 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