Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
内存友好的Python Dict密钥管理_Python_Dictionary_Memory Management - Fatal编程技术网

内存友好的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的行为。如果错误确实来自原始代码中的某一行,则使用此选项可以解决此问题。