1. ホーム
  2. python

[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?

2022-02-21 07:32:44

質問

同じエラーで他の質問も全てチェックしましたが、役に立つ解決策は見つかりませんでした =/。

リストの辞書を持っています。

d = {'a': [1], 'b': [1, 2], 'c': [], 'd':[]}

のように、いくつかの値が空になっています。これらのリストを作成した後、辞書を返す前に、これらの空のリストを削除したい。現在、私は次のようにこれを行おうとしています。

for i in d:
    if not d[i]:
        d.pop(i)

しかし、これではランタイムエラーが発生します。辞書を繰り返しながら要素の追加や削除ができないことは承知していますが、これを回避する方法はあるでしょうか?

解決方法は?

Python 3.xおよび2.xでは、以下のように使用できます。 list を使えば、キーのコピーを強制的に作成することができます。

for i in list(d):

Python 2.xで呼び出す場合 keys を変更する際に、キーのコピーを作成し、それを繰り返し使用することができます。 dict :

for i in d.keys():

しかし、Python 3.xでは、この2番目の方法はあなたのエラーには役立たないことに注意してください。 keys ビューオブジェクト の代わりに、キーをリストにコピーします。