Python:从dict inp删除

2024-06-16 10:47:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python应用程序,它执行与大文件的关联。它将这些数据存储在dict中。根据输入文件的不同,dict可能会变得非常大,以至于不再适合内存。这会导致系统挂起,所以我想阻止它。在

我的想法是,总有一些相关性,而这些相关性对于以后的处理来说并不那么相关。这些可以在不改变整体结果的情况下删除。我想在我没有多少记忆的时候做这个。在

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

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

通常的解决方案是为迭代创建dict的副本,或者创建一个只包含我想要保留的元素的新dict。不过,可能只剩下几百个内存。所以我不能做太多的复制,因为这可能会再次导致系统挂起。在

我被困在这里了。有谁能想出一个更好的方法来实现我的需要吗?如果在迭代时完全不可能就地删除dict条目,也许有一些解决方法可以拯救我?在

提前谢谢!在

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

键是元组,指定与数据相关的值。在

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

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


Tags: 文件数据方法记忆内存目的应用程序空间
2条回答

我不认为你对这个问题的解决是谨慎的。在

如果你有那么多的数据,我建议你在工具箱里找到一些更大的工具,一个建议就是让一个本地的Redis服务器来帮助你。在

看看redis-collections,它将为您提供一个带有redis后端的类似字典的对象,为您提供一个可持续的解决方案。在

>>> from redis_collections import Dict
>>> d = Dict()
>>> d['answer'] = 42
>>> d
<redis_collections.Dict at fe267c1dde5d4f648e7bac836a0168fe {'answer': 42}>
>>> d.items()
[('answer', 42)]

祝你好运!在

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

相关问题 更多 >