ホームページ >バックエンド開発 >Python チュートリアル >Python で「実行時エラー: 反復中に辞書のサイズが変更されました」を回避するにはどうすればよいですか?
実行時エラーを防ぐためのディクショナリ反復の管理
Python でディクショナリを反復処理すると、特に内容を変更する場合に問題が発生する可能性があります。 「RuntimeError: 反復中にディクショナリのサイズが変更されました」エラーは、反復中にディクショナリのサイズが変更され、反復が無効になる場合に発生します。
問題の解釈:
リストの辞書があり、空の値リストを持つキーと値のペアを削除したいシナリオ:
<code class="python">d = {'a': [1], 'b': [1, 2], 'c': [], 'd':[]}</code>
これを実現するには、次のコード ブロックを試みます:
<code class="python">for i in d: if not d[i]: d.pop(i)</code>
ただし、このアプローチでは前述のエラーが発生します。
原因と解決策:
このエラーは、Python での辞書の反復処理がシングルパス プロセスであるために発生します。この反復中にディクショナリのサイズや内容が変更されると、予期しない動作や一貫性のない結果が発生する可能性があります。この制限を回避するには、次の代替手法を利用できます。
1.リストを使用してキーのコピーを強制する:
Python 2.x と 3.x の両方で、辞書を直接反復する代わりに、反復する辞書のキーのリストを作成できます。これにより、反復中に辞書に加えられた変更に関係なく、一貫したキーのセットが保証されます:
<code class="python">for i in list(d):</code>
2. .keys() メソッドを使用します (Python 2.x のみ):
Python 2.x では、.keys() を呼び出すと辞書のキーのコピーが作成されます。したがって、元の辞書を変更しながら、このコピーを反復処理できます。
<code class="python">for i in d.keys():</code>
.keys() は行われた変更を反映するビュー オブジェクトを返すため、このアプローチは Python 3.x では推奨されないことに注意してください。辞書に登録すると、予期しない結果が生じる可能性があります。
以上がPython で「実行時エラー: 反復中に辞書のサイズが変更されました」を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。