问题
项目中对搜索结果进行过滤使用了OrderedDict ,有一个规则是要将其中的一些元素进行删除,在使用下面代码的时候报上述错误, 编程语言py3.7
from collections import OrderDict
search_res = OrderedDict([("k1", "v1"), ("k2", "v2"), ("k3", "v3")])
for k, v in search_res.items():
if k == 'k2': # 假设规则是删除k2
del search_res[k]
上述程序会报这个问题:
RuntimeError: OrderedDict mutated during iteration
原因
边遍历边操作,导致元素发生变化,这样遍历的对象就不是一个固定的容器,导致出现runtimeError
for k, v in search_res.items()
...
del search_res[k]
解决办法
遍历的时候就固定好遍历列表
for k in list(search_res.keys()): # 固定了遍历的对象
if k == 'v2':
del search_res[k]