Python:从dict中删除

Python:从dict中删除,python,Python,我有一个Python应用程序,它可以对大文件执行关联。它将这些存储在一个dict中。根据输入文件的不同,这个dict可能会变得非常大,以至于无法再放入内存中。这会导致系统挂起,因此我想防止出现这种情况 我的想法是,总有一些相关性,这些相关性与后面的处理无关。可以删除这些内容,而不会对总体结果造成太大的更改。当我没有太多的记忆时,我想这样做 因此,我会定期检查可用内存。如果变得太少(例如,小于300MB),则删除不相关的相关性以获得更多空间。这就是理论 现在来看我的问题:在Python中,在迭代d

我有一个Python应用程序,它可以对大文件执行关联。它将这些存储在一个dict中。根据输入文件的不同,这个dict可能会变得非常大,以至于无法再放入内存中。这会导致系统挂起,因此我想防止出现这种情况

我的想法是,总有一些相关性,这些相关性与后面的处理无关。可以删除这些内容,而不会对总体结果造成太大的更改。当我没有太多的记忆时,我想这样做

因此,我会定期检查可用内存。如果变得太少(例如,小于300MB),则删除不相关的相关性以获得更多空间。这就是理论

现在来看我的问题:在Python中,在迭代dict时不能从dict中删除。但这正是我需要做的,因为我必须在删除之前检查每个dict条目的相关性

通常的解决方案是为迭代创建一个dict副本,或者创建一个只包含我想要保留的元素的新dict。然而,dict可能有几GB大,并且只剩下几百MB的可用内存。因此,我无法进行大量复制,因为这可能再次导致系统挂起

我被卡住了。有人能想出更好的方法来实现我的需求吗?如果在迭代时完全不可能就地删除dict条目,那么可能有一些解决方法可以拯救我

提前谢谢

编辑——有关dict的更多信息:

键是元组,指定数据关联所依据的值

这些值是包含相关日期的dict。这些dict的键总是字符串,值是数字(int或float)


我通过比较数值指令中的数值与某些阈值来检查相关性。如果值低于阈值,则可以删除特定的相关性。

我认为您对该问题的解决方案并不谨慎

如果您有那么多数据,我建议您在工具箱中找到一些更大的工具,建议让本地Redis服务器帮助您

看一看,这将为您提供一个具有redis后端的类似字典的对象,为您提供一个可持续的解决方案

>>> from redis_collections import Dict
>>> d = Dict()
>>> d['answer'] = 42
>>> d
<redis_collections.Dict at fe267c1dde5d4f648e7bac836a0168fe {'answer': 42}>
>>> d.items()
[('answer', 42)]
>>从redis\u集合导入Dict
>>>d=Dict()
>>>d[答案]=42
>>>d
>>>d.项目()
[(‘答案’,42)]

祝你好运

我认为你对这个问题的解决方案并不谨慎

如果您有那么多数据,我建议您在工具箱中找到一些更大的工具,建议让本地Redis服务器帮助您

看一看,这将为您提供一个具有redis后端的类似字典的对象,为您提供一个可持续的解决方案

>>> from redis_collections import Dict
>>> d = Dict()
>>> d['answer'] = 42
>>> d
<redis_collections.Dict at fe267c1dde5d4f648e7bac836a0168fe {'answer': 42}>
>>> d.items()
[('answer', 42)]
>>从redis\u集合导入Dict
>>>d=Dict()
>>>d[答案]=42
>>>d
>>>d.项目()
[(‘答案’,42)]

祝你好运

我认为你对这个问题的解决方案并不谨慎

如果您有那么多数据,我建议您在工具箱中找到一些更大的工具,建议让本地Redis服务器帮助您

看一看,这将为您提供一个具有redis后端的类似字典的对象,为您提供一个可持续的解决方案

>>> from redis_collections import Dict
>>> d = Dict()
>>> d['answer'] = 42
>>> d
<redis_collections.Dict at fe267c1dde5d4f648e7bac836a0168fe {'answer': 42}>
>>> d.items()
[('answer', 42)]
>>从redis\u集合导入Dict
>>>d=Dict()
>>>d[答案]=42
>>>d
>>>d.项目()
[(‘答案’,42)]

祝你好运

我认为你对这个问题的解决方案并不谨慎

如果您有那么多数据,我建议您在工具箱中找到一些更大的工具,建议让本地Redis服务器帮助您

看一看,这将为您提供一个具有redis后端的类似字典的对象,为您提供一个可持续的解决方案

>>> from redis_collections import Dict
>>> d = Dict()
>>> d['answer'] = 42
>>> d
<redis_collections.Dict at fe267c1dde5d4f648e7bac836a0168fe {'answer': 42}>
>>> d.items()
[('answer', 42)]
>>从redis\u集合导入Dict
>>>d=Dict()
>>>d[答案]=42
>>>d
>>>d.项目()
[(‘答案’,42)]


祝你好运

钥匙大吗?如果没有,您可以在dict上循环以确定应该删除哪些条目;将每个此类条目的密钥存储在列表中。然后循环这些键并将它们从目录中删除。

这些键大吗?如果没有,您可以在dict上循环以确定应该删除哪些条目;将每个此类条目的密钥存储在列表中。然后循环这些键并将它们从目录中删除。

这些键大吗?如果没有,您可以在dict上循环以确定应该删除哪些条目;将每个此类条目的密钥存储在列表中。然后循环这些键并将它们从目录中删除。

这些键大吗?如果没有,您可以在dict上循环以确定应该删除哪些条目;将每个此类条目的密钥存储在列表中。然后循环这些键并将其从dict中删除。

什么是dict值类型以及如何检查相关性?我已将此信息添加到原始帖子中。这些值dict中的键是否已修复?如果是这样,你是否考虑内存中的DB而不是DICT,比如SQLite?嗯,有几个模块(类似插件)执行不同的相关性。对于这些模块中的每一个,值dicts的键都是固定的。至少在您更改相关算法之前,这在测试期间经常发生。因此,使用数据库将意味着极大的灵活性损失,这就是为什么我想找到另一个解决方案。dict值类型是什么,以及如何检查相关性?我已将此信息添加到原始帖子中。这些值dict中的键是否已修复?如果是这样,你是否考虑内存中的DB而不是DICT,比如SQLite?嗯,有几个模块(类似插件)执行不同的相关性。对于这些模块中的每一个,值dicts的键都是固定的。至少在您更改相关算法之前,这在测试期间经常发生。因此,使用数据库将意味着极大的灵活性损失,这就是为什么我希望找到另一个数据库