「RuntimeError: 反復中に辞書のサイズが変更されました」というエラーを回避するにはどうすればよいですか? 質問する

「RuntimeError: 反復中に辞書のサイズが変更されました」というエラーを回避するにはどうすればよいですか? 質問する

リストの辞書があるとします:

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 辞書を反復処理しながら変更するこれが問題を引き起こす可能性がある理由とその理由を引用します。

ベストアンサー1

Python 3.xと2.xでは、listキーのコピーを強制的に作成するには:

for i in list(d):

Python 2.xの呼び出しでは.keysを変更しながら反復処理できるキーのコピーを作成しましたdict:

for i in d.keys():

しかしPython 3.xでは.keysオブジェクトを表示代わりに、エラーは修正されません。

おすすめ記事