Supprimer des éléments
Apprenez toutes les façons de supprimer des éléments d'un dictionnaire Python : pop(), popitem(), del, clear() et les compréhensions de dictionnaire, avec des exemples.
Les dictionnaires Python sont des structures clé-valeur mutables, ce qui signifie que vous pouvez ajouter, modifier et supprimer des entrées à tout moment. Ce chapitre couvre toutes les techniques standard pour supprimer des éléments d'un dictionnaire — pop(), popitem(), l'instruction del, clear(), et les compréhensions de dictionnaire — avec des notes pratiques sur le moment où chaque approche est la plus adaptée et comment éviter les erreurs courantes.
Comparaison rapide
| Technique | Supprime | Retourne | Lève une erreur si la clé est absente |
|---|---|---|---|
dict.pop(key) | Une paire clé-valeur | La valeur supprimée | KeyError (sauf si une valeur par défaut est fournie) |
dict.pop(key, default) | Une paire clé-valeur | La valeur supprimée ou la valeur par défaut | Jamais |
dict.popitem() | La dernière paire insérée | Un tuple (key, value) | KeyError si le dictionnaire est vide |
del dict[key] | Une paire clé-valeur | Rien | KeyError |
dict.clear() | Toutes les paires | Rien | Jamais |
| Compréhension de dict | Paires sélectionnées | Nouveau dictionnaire | Jamais |
Supprimer un élément unique avec pop()
dict.pop(key) supprime la paire clé-valeur pour la clé donnée et retourne la valeur qui y était stockée. Cela le rend utile lorsque vous avez besoin de la valeur pour un traitement ultérieur après l'avoir supprimée.
Supprimer une clé et capturer sa valeur
Si la clé n'existe pas, pop() lève une KeyError :
inventory = {'apples': 10}
inventory.pop('oranges') # KeyError: 'oranges'Utiliser une valeur par défaut pour éviter KeyError
Passez un second argument à pop() comme valeur de secours. Lorsque la clé est absente, pop() retourne la valeur par défaut au lieu de lever une erreur — le dictionnaire reste inchangé.
Suppression sécurisée avec une valeur par défaut
inventory = {'apples': 10, 'cherries': 20}
removed = inventory.pop('oranges', 0)
print(removed) # 0
print(inventory) # {'apples': 10, 'cherries': 20}Ce modèle est une alternative propre à la vérification if key in dict avant d'appeler pop().
Supprimer le dernier élément inséré avec popitem()
dict.popitem() supprime et retourne la dernière paire clé-valeur insérée sous forme de tuple (key, value). C'était l'outil principal pour itérer et consommer un dictionnaire avant que Python 3.7 ne garantisse l'ordre d'insertion.
Extraire le dernier élément inséré
scores = {'alice': 95, 'bob': 82, 'carol': 78}
last_item = scores.popitem()
print(last_item) # ('carol', 78)
print(scores) # {'alice': 95, 'bob': 82}popitem() lève une KeyError si le dictionnaire est vide. Utilisez-le lorsque vous souhaitez traiter et consommer tous les éléments un par un (à la manière d'une pile), ou lorsque vous avez uniquement besoin de supprimer l'entrée la plus récemment ajoutée.
Supprimer un élément avec del
L'instruction del supprime une paire clé-valeur par sa clé sans retourner de valeur. Utilisez-la lorsque vous avez uniquement besoin de supprimer l'entrée et que la valeur supprimée ne vous intéresse pas.
Supprimer une clé avec del
Comme pop() sans valeur par défaut, del lève une KeyError si la clé est absente :
del user['phone'] # KeyError: 'phone'del vs pop() — lequel utiliser ?
- Utilisez
dellorsque vous souhaitez supprimer l'élément sans jamais avoir besoin de sa valeur. - Utilisez
pop()lorsque vous avez besoin de la valeur supprimée, ou lorsque vous souhaitez une opération sans effet si la clé peut être absente.
Supprimer tous les éléments avec clear()
dict.clear() vide le dictionnaire en place, laissant un {} vide. L'objet dictionnaire lui-même existe toujours, donc toute autre variable faisant référence au même dictionnaire verra également un dictionnaire vide.
Effacer toutes les entrées
config = {'host': 'localhost', 'port': 5432, 'debug': True}
config.clear()
print(config) # {}Comparez cela à la réassignation config = {} : la réassignation crée un nouveau objet dictionnaire et laisse toutes les autres références pointer vers l'ancien (toujours rempli). clear() modifie le même objet.
config = {'host': 'localhost', 'port': 5432}
alias = config # alias and config point to the same dict
config = {} # only config is updated; alias still has data
print(alias) # {'host': 'localhost', 'port': 5432}
config = {'host': 'localhost', 'port': 5432}
alias = config
config.clear() # modifies the shared object
print(alias) # {}Supprimer plusieurs clés spécifiques
Python ne dispose d'aucune méthode intégrée pour supprimer plusieurs clés à la fois, mais il existe deux approches idiomatiques.
Boucle avec pop()
settings = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
to_remove = ['b', 'd']
for key in to_remove:
settings.pop(key, None) # None default = safe even if key is absent
print(settings) # {'a': 1, 'c': 3}Compréhension de dictionnaire
Une compréhension de dictionnaire construit un nouveau dictionnaire qui exclut les clés indésirables. C'est préférable lorsque vous souhaitez conserver l'original intact.
Filtrer un dictionnaire par compréhension
Vous pouvez également filtrer par valeur plutôt que par clé :
scores = {'alice': 95, 'bob': 40, 'carol': 78, 'dan': 35}
passing = {name: score for name, score in scores.items() if score >= 50}
print(passing) # {'alice': 95, 'carol': 78}Supprimer des éléments lors d'une itération — le piège courant
Modifier un dictionnaire pendant l'itération lève une RuntimeError en Python 3 :
data = {'a': 1, 'b': 2, 'c': 3}
# This raises RuntimeError: dictionary changed size during iteration
for key in data:
if data[key] < 2:
del data[key]Le modèle sûr consiste à itérer sur une copie des clés :
data = {'a': 1, 'b': 2, 'c': 3}
for key in list(data): # list() snapshots the keys
if data[key] < 2:
del data[key]
print(data) # {'b': 2, 'c': 3}Vous pouvez également construire un nouveau dictionnaire avec une compréhension (illustré ci-dessus dans la section compréhension) — c'est souvent l'approche la plus propre.
Pour en savoir plus sur l'itération sécurisée des dictionnaires, consultez Loop Dictionaries.
Choisir la bonne méthode
- Besoin de la valeur supprimée ? Utilisez
pop(key). - La clé pourrait ne pas exister ? Utilisez
pop(key, default)pour éviter uneKeyError. - Juste supprimer, sans besoin de la valeur ? Utilisez
del dict[key]. - Supprimer la dernière entrée insérée ? Utilisez
popitem(). - Tout effacer ? Utilisez
clear(). - Supprimer selon une condition / plusieurs clés ? Utilisez une compréhension de dictionnaire ou une boucle
for key in list(dict).