354

指定されたキーが存在する場合にのみ、辞書内の項目を削除する他の方法はありますか?

if key in mydict:
    del mydict[key]

シナリオは、特定のディクショナリから削除するキーのコレクションが与えられたというものですが、それらすべてがディクショナリに存在するかどうかはわかりません。より効率的なソリューションを見逃した場合に備えて。

4

3 に答える 3

775

使用できます: dict.pop

 mydict.pop("key", None)

2 番目の引数Noneが指定KeyErrorされていない場合、キーが辞書にない場合に発生することに注意してください。2 番目の引数を指定すると、条件付き例外が回避されます。

于 2013-03-14T13:49:39.607 に答える
20

もあります:

try:
    del mydict[key]
except KeyError:
    pass

これは 2 回ではなく 1 回のルックアップしか行いません。ただし、except節はコストがかかるため、except 節を頻繁に実行することになると、おそらく既存のものよりも効率が低下します。

于 2013-03-14T13:49:44.387 に答える
6

アプローチ: 削除するキーを計算し、dict を変更する

keys削除するように指定されたキーのリスト/イテレータを呼び出しましょう。私はこれをします:

keys_to_remove = set(keys).intersection(set(mydict.keys()))
for key in keys_to_remove:
    del mydict[key]

影響を受けるすべてのアイテムを前もって計算し、それらを操作します。

アプローチ:保持するキーを計算し、それらのキーで新しい辞書を作成します

既存の辞書を変更するよりも新しい辞書を作成することを好むので、おそらくこれも検討します。

keys_to_keep = set(mydict.keys()) - set(keys)
new_dict = {k: v for k, v in mydict.iteritems() if k in keys_to_keep}

また:

keys_to_keep = set(mydict.keys()) - set(keys)
new_dict = {k: mydict[k] for k in keys_to_keep}
于 2013-03-14T14:01:03.553 に答える