0

私のコードでは、辞書内のキーをループし、キーが条件 (別のリストに存在する) に一致する場合、キーと値のペアが削除されます。

for key in my_dict:
    if key in my_list:
        del my_dict[key]

問題は、コードを実行すると、「反復中に辞書のサイズが変更されました」というエラーが表示されることです。私はそれができないことに気づきました:

for i in range(len(my_dict)):...

私の辞書のキーインデックスは、削除するたびに変更されるためです。

エラーを発生させずに辞書内の要素を削除する方法はありますか?

4

4 に答える 4

1

辞書内のすべてのキーを必ずしも反復処理する必要はありません

for key in my_list:
    my_dict.pop(key, None)

やります。

popここでは、アイテムが存在する場合は削除しますが、辞書にないキーが my_list にある場合は例外を発生させません。

于 2013-07-11T15:48:38.700 に答える
1

辞書をループする必要はありません。

lst  = ['4','8','15','16','23','42']
dct  = {'4':4, 'foo':'bar'}
keys = dct.keys()

for key in lst:
    if key in keys:
        dct.pop(key)
于 2013-07-11T15:50:00.373 に答える
0

これに対する答えは辞書をコピーすることです。私が信じている小さな関数を書く必要があります。このスレッドを参照してください。

于 2013-07-11T15:38:45.040 に答える
0

最初にdict(my)のコピーを作成する必要があります:

my = {2:5, 3:4, 7:9}
lst = [2,7]
del_my = dict(my)


for i in my:
    if i in lst:
        del del_my[i]


print del_my
于 2013-07-11T15:44:52.473 に答える