ホームページ >バックエンド開発 >Python チュートリアル >Python で「実行時エラー: 反復中に辞書のサイズが変更されました」を回避するにはどうすればよいですか?

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-02 20:06:30524ブラウズ

How to Avoid

実行時エラーを防ぐためのディクショナリ反復の管理

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。