我试图在迭代字典时从字典中删除一个键。当直接从字典中删除键时,我得到:
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)
所以有人可以帮忙解决这个问题吗?
对于 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)
迭代字典时无法删除键值对。相反,您可以使用
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}
如果您提前知道密钥并希望将其从字典中删除:
del mydict['two']
通常,您没有理由需要在迭代时删除已知键,特别是因为字典被认为是无序的,您无法判断何时会到达所选键。
更简单的方法是在迭代之前制作字典的浅表副本,如下所示:
您在第二个代码中仍然遇到错误,因为 new_dict 只是引用同一对象的另一个变量。您可以简单地复制 my_dict 而不是创建另一个指向它的变量。