内存友好的Python Dict密钥管理
我在以下词典更新中遇到内存错误:内存友好的Python Dict密钥管理,python,dictionary,memory-management,Python,Dictionary,Memory Management,我在以下词典更新中遇到内存错误: for x in depot: if x in self.xx: self.xx[x] += 1 else: self.xx[x] = 1 它给出了self.xx[x]=1行的错误。 我想在后面会有一个重新初始化 如何以内存友好的方式解决此问题,而不使用类似数据库的结构? 目前我正在开发一个Trie结构,它是免费的还是您认为它可以帮助我?您考虑过在self.xx中使用一个吗 您的代码看起来有点像这样: self.
for x in depot:
if x in self.xx:
self.xx[x] += 1
else:
self.xx[x] = 1
它给出了self.xx[x]=1行的错误。
我想在后面会有一个重新初始化
如何以内存友好的方式解决此问题,而不使用类似数据库的结构?
目前我正在开发一个Trie结构,它是免费的还是您认为它可以帮助我?您考虑过在self.xx中使用一个吗 您的代码看起来有点像这样:
self.xx = defaultdict(int)
for x in depot:
self.xx[x] += 1
你的问题一定来自你的仓库的大小,我想这是一个列表。您尝试遍历所有的self.xx字典,每次迭代都会检查self.xx字典是否包含x,这可能会导致内存错误 您可以尝试使用经过优化的“来自集合”解决此问题:
from collections import Counter
self.xx = Counter(depot)
现在self.xx是一个字典,每个键都是与depot不同的值,它对应的值是depot中出现的次数之和
例如:
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
这个循环怎么称呼?你能举一个简单的例子说明你的类以及它是如何使用的吗?我发现很难相信内存错误的真正罪魁祸首是你提供的代码片段。我们需要更多的上下文。嘿,@uhuuyouneverknow您是否发现任何答案有帮助?不确定这是否修复了与OPOW中原始问题相关的任何问题?这是否回答了问题?他要求提供更好的内存管理功能,他的原始代码正在重新实现defaultdict的行为。如果错误确实来自原始代码中的某一行,则使用此选项可以解决此问题。