反復された辞書は基礎となる項目を安全に変更できますか?
iteritems() を使用して Python 辞書を走査する場合、辞書を変更すると予期せぬ問題が発生する可能性があります結果。項目 (例: del d[f(k)]) を削除すると、「RuntimeError: 反復中に辞書のサイズが変更されました。」がトリガーされる可能性があります。
公式ドキュメント:
によるとPython のドキュメントに記載されているように、反復中に辞書を変更しないでください。 iteritems() メソッドは、キーと値のディクショナリのコピーを反復処理しますが、基になるディクショナリ自体は反復処理しません。したがって、辞書への直接の変更 (項目の削除や追加など) はイテレータには反映されません。
安全な方法:
この問題を回避するには、次のようにします。ドキュメントでは、反復する前に d.copy().items() を使用して辞書の独立したコピーを作成することを推奨しています。あるいは、キーのリストを反復処理し、ループ内で del d[key] または d[key] = newValue を使用することもできます。
部分変更:
while新しいキーに項目を追加すると問題が発生する可能性がありますが、既存の値を変更することは通常は安全です。ただし、既存のキーの値を変更すると、そのハッシュ値が変更され、辞書内のその位置に影響を与える可能性があることに注意してください。
以上がPython で `iteritems()` を使用して反復処理中に辞書を安全に変更できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。