例えば、こんな辞書があったとする。
>>> dic = {'Andy': 27, 'Bill': 32, 'Charlie': 24}
この辞書から、値が 30 を超えるキー(つまり ‘Bill’)を削除したい。こうすると:
>>> for k in dic: ... if dic[k] > 30: ... del(dic[k]) ... Traceback (most recent call last): File "<stdin>", line 1, in <module> RuntimeError: dictionary changed size during iteration
エラーになる(イテレーションの最中に辞書のサイズが変わってるって怒られる)。
でもキーは削除されてる。
>>> dic {'Charlie': 24, 'Andy': 27}
なんでだかは解らない。
エラーが出ないようにするには items()
メソッドを使えばいい。今度は値が 25 を超えるキーを削除してみる。
>>> for k, v in dic.items(): ... if v > 25: ... del(dic[k]) ... >>> dic {'Charlie': 24}
無事に消えた。