1. ホーム
  2. python

[解決済み】反復中に辞書のサイズが変更されたエラーの解決方法とは?

2022-02-21 18:39:57

質問

辞書にある大きな値とそのキーをすべてポップアウトし、小さな値を残したい。以下は、私のプログラムの一部です。

for key,value in dictionary.items():
    for key1, value1 in dictionary.items(): 
            if key1!= key and value > value1:
                dictionary.pop(key)             
    print (dictionary)  

という結果になります。

RuntimeError: dictionary changed size during iteration    

どうすればこのエラーを回避できますか?

解決方法は?

代替案

もし、辞書の中の最小の値を探しているのであれば、このようにすることができます。

min(dictionary.values())

minが使えない場合は、sortedを使用することができます。

sorted(dictionary.values())[0]

なぜこのエラーが発生するのですか?

余談ですが、このように Runtime Error は、内側のループで、外側のループが基づいているイテレータを変更するためです。このとき pop というエントリーがあり、外側のイテレータがそれに到達すると、削除された要素にアクセスしようとするため、エラーが発生します。
Python 2.7 (3.xではない) でコードを実行しようとすると、実際に Key Error .

エラーを回避するためにはどうしたらよいですか?

を変更したい場合 イテラブル をベースにしたループ内の イテレータ を使用する必要があります。 ディープコピー その