如何删除一个非常大的字典中的许多元素?

时间:2016-05-23 06:02:05

标签: python

我有一个非常大的dict,我想要del来自它的许多元素。也许我应该这样做:

new_dict = { key:big_dict[key] for key in big_dict if check(big_dict[key] }

但是,我没有足够的内存来将old_dictnew_dict保留在RAM中。有没有办法解决?

添加:

我不能逐个删除元素。我需要对值进行测试,以找到我想要del的元素。

我也可以在for循环中删除元素,如:

for key in dic: 
    if test(dic(key)): 
        del dic[key]

这是一个错误......无法在循环中改变len(dic)......

我的上帝......我甚至无法记住钥匙到del,钥匙太多......

我知道,如果dict类没有这样做的功能,也许这样做的唯一方法就是弄错新电脑......

3 个答案:

答案 0 :(得分:1)

您可以尝试遍历字典并删除

不需要的元素
del big_dict[key]

这样你就不会复制字典了。

答案 1 :(得分:1)

以下是一些选项:

  • 制作一个新的词典'在磁盘上,pickleshelve可能会有所帮助。
  • 迭代并构建一个键列表,直到达到一定大小,删除它们,然后再次重复迭代,每次都可以创建一个更大的列表。
  • 根据.keys()中的索引存储要删除的密钥,这可以提高内存效率。只要在调用.keys()之间未修改字典,就可以了。如果要删除大约一半的元素,请使用二进制序列执行此操作(1 =删除,0 =保留)。如果要删除(或不删除)绝大多数元素,则将相应的键作为整数存储在列表中。

答案 2 :(得分:0)

您可以使用

big_dict.pop("key", None)

请参阅此处 How to remove a key from a python dictionary?