RuntimeError: OrderedDict mutated during iteration
Traceback (most recent call last):
File "/home/yongqiang/pytorch_work/end2end-asr-pytorch-example/yongqiang.py", line 18, in <module>
for key, value in dict_data.items():
RuntimeError: OrderedDict mutated during iteration
1. RuntimeError: OrderedDict mutated during iteration
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# yongqiang cheng
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from collections import OrderedDict
dict_data = OrderedDict()
dict_data['1'] = "cheng"
dict_data['2'] = "yong"
dict_data['3'] = "qiang"
dict_data['4'] = "forever"
dict_data['5'] = "strong"
for key, value in dict_data.items():
print(key + ': ' + value)
if ('3' == key):
del dict_data[key]
/home/yongqiang/miniconda3/envs/pt-1.4_py-3.6/bin/python /home/yongqiang/pytorch_work/end2end-asr-pytorch-example/yongqiang.py
Traceback (most recent call last):
File "/home/yongqiang/pytorch_work/end2end-asr-pytorch-example/yongqiang.py", line 18, in <module>
for key, value in dict_data.items():
RuntimeError: OrderedDict mutated during iteration
1: cheng
2: yong
3: qiang
Process finished with exit code 1
2. The issue is that dict_data.items()
does not return a copy, so it should not be modified while iterating.
Python 中賦值語句不復制對象,而是在目標和對象之間創建綁定 (bindings) 關係。對於自身可變或者包含可變項的集合對象,開發者有時會需要生成其副本用於改變操作,進而避免改變原對象。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# yongqiang cheng
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from collections import OrderedDict
dict_data = OrderedDict()
dict_data['1'] = "cheng"
dict_data['2'] = "yong"
dict_data['3'] = "qiang"
dict_data['4'] = "forever"
dict_data['5'] = "strong"
for key, value in list(dict_data.items()):
print(key + ': ' + value)
if ('3' == key):
del dict_data[key]
print()
for key, value in list(dict_data.items()):
print(key + ': ' + value)
/home/yongqiang/miniconda3/envs/pt-1.4_py-3.6/bin/python /home/yongqiang/pytorch_work/end2end-asr-pytorch-example/yongqiang.py
1: cheng
2: yong
3: qiang
4: forever
5: strong
1: cheng
2: yong
4: forever
5: strong
Process finished with exit code 0