我试图在迭代它时从字典中删除一个键。在直接尝试从字典中删除密钥时,我得到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)
所以任何人都可以帮助解决这个问题。
答案 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。