RuntimeError: OrderedDict mutated during iteration
RuntimeError: OrderedDict mutated during iteration
1. RuntimeError: OrderedDict mutated during iteration
2. The issue is that
Pythonの付与文は、オブジェクトをコピーするのではなく、ターゲットとオブジェクトの間にバインド関係を作成します.開発者は、自身が可変または可変項目を含む集合オブジェクトに対して、操作を変更するためにそのコピーを生成し、元のオブジェクトを変更しないようにする必要がある場合があります.
Traceback (most recent call last):
File "/home/yongqiang/pytorch_work/end2end-asr-pytorch-example/yongqiang.py", line 18, in
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
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の付与文は、オブジェクトをコピーするのではなく、ターゲットとオブジェクトの間にバインド関係を作成します.開発者は、自身が可変または可変項目を含む集合オブジェクトに対して、操作を変更するためにそのコピーを生成し、元のオブジェクトを変更しないようにする必要がある場合があります.
#!/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