1. ホーム
  2. python

[解決済み] Pythonのdictを反復処理しながら修正する

2023-01-08 01:37:26

質問

Pythonの辞書があるとします。 d があり、それをこのように反復しているとします。

for k,v in d.iteritems():
    del d[f(k)] # remove some item
    d[g(k)] = v # add a new item

( fg は単なるブラックボックス化された変換です)。

つまり、項目を追加/削除しようとすると d で反復しながら iteritems .

これはよく定義されていますか?あなたの答えをサポートするために、いくつかの参考文献を提供してもらえますか?

(これが壊れていたらどう修正するかは明白なので、これは私が求めている角度ではありません)

どのように解決するのか?

Pythonのドキュメントページで明示されています(for Python 2.7 ) に書かれています。

使用方法 iteritems() を使用すると、辞書のエントリを追加または削除する際に RuntimeError を発生させたり、すべてのエントリを反復処理することに失敗する可能性があります。

同様に Python 3 .

同じことが iter(d) , d.iterkeys()d.itervalues() に対してそうであると、私は言い切ります。 for k, v in d.items(): (についてはそうだと言っておきます(私は for が何をするのかよく覚えていませんが、もしこの実装が iter(d) ).