该报错是一个python中常见的错误,通常在使用for 循环迭代字典时删除其中的元素时出现。这个问题的根本原因在于迭代字典的同时修改了它,导致字典的大小发生了变化。
如下面的例子,就会报错:
d = {"a":1,"b":2,"c':3} for k,v in d.items(): if v == 2: del d[k]
上述代码中,就会产生错误!
为了解决这个问题,可以在迭代字典时,创建一个副本或者用另外一种方式实现需求。下面是一些解决的方法。
1.将字典转换为列表或者元组,然后再进行迭代,可以避免改变字典大小的问题。
d = {"a":1,"b":2,"c':3} for k,v in list(d.items()): if v == 2: del d[k]
2.创建一个迭代副本而不是原来字典。我们这样可以安全地修改字典:
d = {"a":1,"b":2,"c':3} for k,v in d.copy.items(): if v == 2: del d[k]
3.将需要删除的元素添加到另外一个列表中,循环迭代完成后再对原始字典进行操作。
d = {"a":1,"b":2,"c':3} list_a = [] for k,v in d.items(): if v == 2: list_a.append(k) for key in list_a: del d[key]
总之,为了避免出现“dictionary changed size during iteration” 错误,我们需要迭代和修改字典之间找到一种安全的方法。
标签:dictionary,迭代,python,items,list,报错,del,字典 From: https://www.cnblogs.com/shaoyishi/p/17376980.html