指定されたキーが存在する場合にのみ、辞書内の項目を削除する他の方法はありますか?
if key in mydict:
del mydict[key]
シナリオは、特定のディクショナリから削除するキーのコレクションが与えられたというものですが、それらすべてがディクショナリに存在するかどうかはわかりません。より効率的なソリューションを見逃した場合に備えて。
指定されたキーが存在する場合にのみ、辞書内の項目を削除する他の方法はありますか?
if key in mydict:
del mydict[key]
シナリオは、特定のディクショナリから削除するキーのコレクションが与えられたというものですが、それらすべてがディクショナリに存在するかどうかはわかりません。より効率的なソリューションを見逃した場合に備えて。
使用できます: dict.pop
mydict.pop("key", None)
2 番目の引数None
が指定KeyError
されていない場合、キーが辞書にない場合に発生することに注意してください。2 番目の引数を指定すると、条件付き例外が回避されます。
もあります:
try:
del mydict[key]
except KeyError:
pass
これは 2 回ではなく 1 回のルックアップしか行いません。ただし、except
節はコストがかかるため、except 節を頻繁に実行することになると、おそらく既存のものよりも効率が低下します。
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}