1. ホーム
  2. スクリプト・コラム
  3. パイソン

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

2022-01-09 18:41:37

質問

リストの辞書に対して次の操作を行う必要があります。このリストにはいくつかのNULL値があり、これらのリストの作成が終了したときに辞書を返す前に、これらのNULLリストを削除したいのですが、コードは次のとおりです。

d = {'a': [1], 'b': [1, 2], 'c': [], 'd':[]}
for i in d:
    if not d[i]:
        d.pop(i)

しかし、私はランタイムエラーを得た。

RuntimeError: dictionary changed size during iteration

解決方法は?

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 ビューオブジェクト の代わりに、キーをリストにコピーします。