Python Dictionnaires : Modifier les Clés et Valeurs
Apprenez à modifier des valeurs, renommer des clés et mettre à jour des éléments en masse dans Python avec assignment, pop() et update().
Les dictionnaires Python vous permettent de stocker des données sous forme de paires clé-valeur et de les mettre à jour librement après leur création. Ce chapitre couvre toutes les façons pratiques de modifier des éléments de dictionnaire existants : changer une seule valeur, renommer une clé, effectuer des mises à jour en masse avec update(), et gérer les dictionnaires imbriqués — y compris les cas particuliers que vous rencontrerez dans du code réel.
Pour en savoir plus sur le fonctionnement des dictionnaires, consultez le chapitre Accéder aux éléments d'un dictionnaire. Pour ajouter de nouvelles entrées, consultez Ajouter des éléments à un dictionnaire. Pour supprimer des entrées, consultez Supprimer des éléments d'un dictionnaire.
Modifier une valeur
La modification la plus simple consiste à réassigner la valeur stockée sous une clé existante. Utilisez la clé comme index du côté gauche d'une affectation :
Si la clé existe déjà, la valeur est écrasée en place. Les autres entrées ne sont pas affectées et le dictionnaire préserve son ordre d'insertion (Python 3.7+).
Que se passe-t-il lorsque la clé n'existe pas ?
Si vous utilisez l'affectation avec une clé qui n'est pas déjà dans le dictionnaire, Python crée silencieusement une nouvelle entrée au lieu de lever une erreur :
prices = {'apple': 1.00, 'banana': 0.50}
prices['mango'] = 2.50 # 'mango' did not exist — a new entry is created
print(prices)
# {'apple': 1.00, 'banana': 0.50, 'mango': 2.50}Lorsque vous souhaitez mettre à jour uniquement si une clé existe, vérifiez d'abord avec in :
if 'banana' in prices:
prices['banana'] = 0.75Mise à jour en masse avec update()
dict.update() vous permet de modifier plusieurs valeurs à la fois. Passez-lui un dictionnaire (ou des arguments nommés) de paires clé-valeur à appliquer :
inventory = {'apple': 10, 'banana': 5, 'orange': 8}
inventory.update({'banana': 12, 'orange': 3})
print(inventory)
# {'apple': 10, 'banana': 12, 'orange': 3}Les clés présentes dans l'argument écrasent les valeurs existantes ; les clés non mentionnées restent inchangées. Vous pouvez également passer des arguments nommés directement :
inventory.update(apple=20, banana=15)
print(inventory)
# {'apple': 20, 'banana': 15, 'orange': 3}update() ajoute également toutes les clés de l'argument qui n'existent pas encore dans le dictionnaire cible, ce qui le rend utile pour fusionner deux dictionnaires ensemble.
Renommer (Changer) une clé
Les clés de dictionnaire sont des références immuables — vous ne pouvez pas renommer une clé directement. Le schéma standard consiste à ajouter une nouvelle clé avec l'ancienne valeur et à supprimer l'ancienne clé. La méthode pop() fait les deux en une seule expression :
pop('banana') renvoie 2 et supprime l'entrée 'banana'. Assigner cette valeur de retour à my_dict['pear'] crée l'entrée renommée.
Notez que la clé renommée apparaît à la fin du dictionnaire, et non à la position d'origine de 'banana', car il s'agit d'une nouvelle clé insérée.
Renommer une clé dont vous n'êtes pas sûr qu'elle existe
Si la clé peut être absente, pop() lève une KeyError. Passez une valeur par défaut comme second argument pour éviter l'exception :
value = my_dict.pop('grape', None) # returns None if 'grape' is missing
if value is not None:
my_dict['kiwi'] = valueModifier à la fois la clé et la valeur
Combinez le schéma de renommage avec une réassignation de valeur pour modifier les deux à la fois :
Ou regroupez-le en une seule étape en assignant directement la valeur souhaitée au lieu de la valeur extraite :
my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
my_dict.pop('banana') # remove old key (discard value)
my_dict['pear'] = 4 # insert new key with new value
print(my_dict)
# {'apple': 1, 'orange': 3, 'pear': 4}Mettre à jour des éléments dans un dictionnaire imbriqué
Lorsqu'un dictionnaire contient d'autres dictionnaires comme valeurs, utilisez l'indexation chaînée pour atteindre la valeur interne :
catalog = {
'apple': {'price': 1.00, 'stock': 50},
'banana': {'price': 0.50, 'stock': 30},
}
# Update only the price of 'banana'
catalog['banana']['price'] = 0.75
print(catalog['banana'])
# {'price': 0.75, 'stock': 30}Vous pouvez également appeler update() sur le dictionnaire interne :
catalog['apple'].update({'price': 1.20, 'stock': 45})
print(catalog['apple'])
# {'price': 1.20, 'stock': 45}Pièges courants
| Situation | Ce qui se passe | Solution |
|---|---|---|
| Affectation à une clé manquante | Crée une nouvelle entrée (sans erreur) | Vérifiez if key in d d'abord si vous voulez seulement mettre à jour |
Appel de pop() sur une clé manquante | Lève une KeyError | Utilisez d.pop(key, default) |
| Le renommage ne conserve pas la position d'origine | La nouvelle clé va à la fin | Si l'ordre importe, reconstruisez avec une compréhension de dictionnaire |
update() avec des clés qui se chevauchent | Écrase silencieusement | C'est intentionnel — c'est le but de update() |
Reconstruire pour préserver l'ordre des clés
Si vous avez besoin que la clé renommée reste à sa position d'origine, reconstruisez le dictionnaire avec une compréhension :
my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
my_dict = {
('pear' if k == 'banana' else k): v
for k, v in my_dict.items()
}
print(my_dict)
# {'apple': 1, 'pear': 2, 'orange': 3}Cette méthode itère sur chaque entrée existante et émet la clé renommée uniquement là où la condition est vraie, laissant tout le reste inchangé.