在python3中迭代另一个字典时无法删除字典键

时间:2018-03-23 07:32:16

标签: python python-3.x dictionary

我试图在迭代它时从字典中删除一个键。在直接尝试从字典中删除密钥时,我得到RuntimeError: dictionary changed size during iteration。我的代码就是。

mydict = {'one': 1, 'two': 2, 'three': 3, 'four': 4}

for k, v in mydict.items():
    if k == 'two':
        del(mydict[k])
        continue
    print(k)

为了避免这种情况,我将相同的字典复制到另一个字典,然后我尝试在复制前一个字典时从复制的字典中删除内容。但是,我仍然收到错误。

mydict = {'one': 1, 'two': 2, 'three': 3, 'four': 4}

new_dict = mydict
for k, v in mydict.items():
    if k == 'two':
        del(new_dict[k])
        continue
    print(k)

所以任何人都可以帮助解决这个问题。

5 个答案:

答案 0 :(得分:0)

迭代字典时无法删除键值对。相反,您可以使用dict comprehension

<强>实施例

mydict = {'one': 1, 'two': 2, 'three': 3, 'four': 4}
print({k:v for k,v in mydict.items() if k != 'two'})

<强>输出:

{'four': 4, 'three': 3, 'one': 1}

答案 1 :(得分:0)

对于Python-3-x,简单的方法是在迭代中将dict转换为list()

mydict = {'one': 1, 'two': 2, 'three': 3, 'four': 4}

for k, v in list(mydict.items()):
    if k == 'two':
        del(mydict[k])
        continue   
    print(k)

答案 2 :(得分:0)

如果您事先知道密钥并希望将其从字典中删除:

  • 尝试在迭代字典时删除它。
  • 复制字典,迭代并删除。
  • 从字典中创建元组列表,迭代并删除。

相反,只需使用del mydict['two']

通常,您没有理由需要在迭代时删除已知密钥,尤其是因为字典被认为是无序的,您无法知道何时会到达所选密钥。

答案 3 :(得分:0)

一种更简单的方法是在迭代之前对dict进行浅表复制,如下所示:

t = "t"
mydict = dict()
mydict["1"] = "t";
mydict["2"] = "a"
print(mydict)
for key, value in mydict.copy().items():
    if value == t:
        del mydict[key]

print(trades)

答案 4 :(得分:-1)

你仍然在第二个代码中收到错误,因为new_dict只是另一个引用同一个对象的变量。您可以简单地复制my_dict,而不是使另一个变量指向它。

new_dict=my_dict.copy()

可悲的是,dict没有深层复制方法,因此必须导入:

from copy import deepcopy
new_dict=deepcopy(my_dict)

有关详细信息,请查看here