当前位置: 首页 > 面试题库 >

Python-在迭代字典时如何从字典中删除项目?

许阿苏
2023-03-14
问题内容

在Python上进行迭代时从字典中删除项目是否合法?

例如:

for k, v in mydict.iteritems():
   if k == val:
     del mydict[k]

这个想法是从字典中删除不满足特定条件的元素,而不是创建一个新字典,该字典是正在迭代的字典的子集。

这是一个好的html" target="_blank">解决方案吗?有没有更优雅/更有效的方法?


问题答案:

此答案不适用于Python3,并且会给出RuntimeError

RuntimeError:字典在迭代过程中更改了大小。

发生这种情况是因为mydict.keys()返回的是迭代器而不是列表。正如评论中指出的那样,只需将其转换mydict.keys()为列表即可list(mydict.keys()),它应该可以工作。

控制台中的一个简单测试显示,在迭代字典时你无法修改字典:

>>> mydict = {'one': 1, 'two': 2, 'three': 3, 'four': 4}
>>> for k, v in mydict.iteritems():
...    if k == 'two':
...        del mydict[k]
...
------------------------------------------------------------
Traceback (most recent call last):
  File "<ipython console>", line 1, in <module>
RuntimeError: dictionary changed size during iteration

如delnan的回答所述,当迭代器尝试移至下一个条目时,删除条目会导致问题。而是使用keys()方法获取键列表并进行处理:

>>> for k in mydict.keys():
...    if k == 'two':
...        del mydict[k]
...
>>> mydict
{'four': 4, 'three': 3, 'one': 1}

如果需要根据项目值删除,请使用items()方法:

>>> for k, v in mydict.items():
...     if v == 3:
...         del mydict[k]
...
>>> mydict
{'four': 4, 'one': 1}


 类似资料:
  • 问题内容: 在Python上进行迭代时从字典中删除项目是否合法? 例如: 这个想法是从字典中删除不满足特定条件的元素,而不是创建一个新字典,该字典是正在迭代的字典的子集。 这是一个好的解决方案吗?有没有更优雅/更有效的方法? 问题答案: 此答案不适用于,并且会给出。 :字典在迭代过程中更改了大小。 发生这种情况是因为返回的是迭代器而不是列表。正如评论中指出的那样,只需将其转换为列表即可,它应该可以

  • 本文向大家介绍在Python中迭代时从字典中删除项目,包括了在Python中迭代时从字典中删除项目的使用技巧和注意事项,需要的朋友参考一下 python字典是无序,可变和索引的集合。它们具有键和值,并且使用键来引用每个项目。在本文中,我们将探讨从字典中删除项目的方法。 与键一起使用del 在这种方法中,我们捕获了需要删除的键值。一旦应用了del函数,这些键的键值对就会被删除。 示例 输出结果 运行

  • 我有一个字典列表,里面有各种键和值。我正试着根据钥匙分组 我的输出: 我不想在值中显示“无” 期望输出: 我也尝试过使用过滤函数,但没有成功。有关于如何删除无的指导吗? 代码

  • 问题内容: 从字典中删除键时,我使用: 有没有一种方法可以做到这一点? 问题答案: 要删除键而不管它是否在字典中,请使用以下两个参数的形式: 如果典中存在,则返回,None否则返回。如果第二个参数未指定(即)并且key不存在,则引发a。 要删除肯定存在的密钥,你还可以使用 如果关键字在字典中不存在,则会引发 。

  • 从字典中删除键时,我使用: 有没有一个简单的方法可以做到这一点?

  • 问题内容: 假设我们有一个Python字典,我们正在像这样迭代它: (并且仅仅是一些黑盒转换。) 换句话说,我们尝试在使用对其进行迭代的同时向其中添加/删除项目。 这个定义好吗?您能否提供一些参考来支持您的答案? (很明显,如果损坏了该如何解决,所以这不是我所追求的角度。) 问题答案: 在python文档页面(针对2.7)上明确提到了 使用而添加或删除字典条目可能会产生一种或无法遍历所有条目。 对