Existe-t-il un autre moyen de supprimer un élément du dictionnaire uniquement si la clé donnée existe, autre que:
if key in mydict:
del mydict[key]
Le scénario est que je reçois une collection de clés à supprimer d'un dictionnaire donné, mais je ne suis pas certain qu'elles existent toutes dans le dictionnaire. Juste au cas où je manquerais une solution plus efficace.
Vous pouvez utiliser dict.pop
:
_ mydict.pop("key", None)
_
Notez que si le deuxième argument, c'est-à-dire None
n'est pas fourni, KeyError
est déclenché si la clé ne figure pas dans le dictionnaire. Fournir le deuxième argument empêche l'exception conditionnelle.
Il y a aussi:
try:
del mydict[key]
except KeyError:
pass
Cela ne fait qu’une seule recherche au lieu de 2. Cependant, les clauses except
coûtent cher. Par conséquent, si vous frappez fréquemment la clause except, celle-ci sera probablement moins efficace que ce que vous avez déjà.
Appelons keys
la liste/l’itérateur de clés que vous devez supprimer. Je ferais ceci:
keys_to_remove = set(keys).intersection(set(mydict.keys()))
for key in keys_to_remove:
del mydict[key]
Vous calculez dès le départ tous les éléments concernés et vous les manipulez.
Je préfère créer un nouveau dictionnaire que de le transformer en un dictionnaire existant, aussi je considérerais probablement ceci aussi:
keys_to_keep = set(mydict.keys()) - set(keys)
new_dict = {k: v for k, v in mydict.iteritems() if k in keys_to_keep}
ou:
keys_to_keep = set(mydict.keys()) - set(keys)
new_dict = {k: mydict[k] for k in keys_to_keep}