admin管理员组

文章数量:1565357

问题

项目中对搜索结果进行过滤使用了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]

参考

  • https://stackoverflow/questions/52549623/runtimeerror-ordereddict-mutated-during-iteration-python3/52549728
  • https://blog.csdn/weixin_41713230/article/details/88842754
  • https://zhuanlan.zhihu/p/110407087

本文标签: OrderedDictRuntimeErroriterationmutated