Un dictionnaire est une table de correspondance
Les listes sont indexées par position. Les dictionnaires sont indexés par clé — généralement une chaîne ou un nombre — et chaque clé correspond à une valeur. Ce seul changement ouvre une énorme catégorie de programmes : inventaires, configs, payloads JSON, profils utilisateurs, caches.
Les clés et les valeurs peuvent être à peu près n'importe quoi. Les clés doivent être hashables (donc : nombres, chaînes, tuples ; pas listes ni autres dicts). Les valeurs n'ont aucune restriction — un dict peut contenir n'importe quoi, y compris d'autres dicts ou listes.
Créer des dictionnaires
Plusieurs façons, chacune avec sa place :
Lire des valeurs
Deux façons, et le choix compte :
Choisis selon l'intention :
- Utilise
[]quand la clé doit être là. Si elle n'y est pas, c'est un bug et tu veux l'erreur bruyante. - Utilise
.get()quand « pas présent » est un cas valide. Ça te permet d'écrire des valeurs par défaut sans try/except.
Ajouter, mettre à jour, supprimer
Affecter une clé la crée ou la met à jour :
update() fusionne un autre dict ou un itérable de paires :
Les clés partagées dans overrides écrasent celles de settings.
Vérifier une clé
in vérifie les clés, pas les valeurs :
Pour vérifier spécifiquement les valeurs, utilise user.values() :
Comment itérer un dictionnaire
Tu as trois vues sur lesquelles boucler :
.items() est ce que tu utiliseras la plupart du temps — ça te donne la paire, déballée, prête à l'emploi.
L'ordre d'itération en Python moderne (3.7+) correspond à l'ordre d'insertion. Un dict n'est pas un « sac magique » — si tu ajoutes a puis b puis c, l'itération te les renvoie dans cet ordre. C'est une garantie du langage sur laquelle tu peux compter.
Comment trier un dictionnaire
Les dictionnaires préservent l'ordre d'insertion, donc « trier » un dict veut vraiment dire construire un nouveau dict dont les clés sont insérées dans l'ordre voulu :
sorted() renvoie une liste de paires ; l'envelopper dans dict(...) reconstruit un dictionnaire avec le nouvel ordre. Si tu n'as besoin que des paires triées (pas d'un dict), saute l'appel externe à dict().
Comment fusionner deux dictionnaires
Python 3.9+ te donne l'opérateur | :
Les valeurs du dict de droite gagnent en cas de collision de clés. .update() est l'équivalent sur place. Sur les anciennes versions de Python, utilise {**defaults, **overrides}.
Le motif setdefault
Un besoin courant : « si la clé est là, utilise sa valeur ; sinon, mets un défaut puis utilise-le. »
Ou, mieux, utilise collections.Counter :
Counter est une sous-classe de dict qui compte par défaut. C'est le bon choix dès que tu comptes des occurrences.
Compréhensions de dictionnaire
Parallèle aux compréhensions de liste, mais pour construire des dicts :
Mêmes règles que les compréhensions de liste, mais avec key: value entre les accolades.
Le dict, jumeau de JSON
Les dicts Python correspondent presque exactement aux objets JSON. Convertir entre les deux est un seul appel :
C'est pourquoi les dicts apparaissent partout dans le travail web — tes requêtes et réponses d'API sont essentiellement de la manipulation de dict avec un peu de réseau entre les deux.
Un exemple pratique
Un petit programme de type config qui suit un profil utilisateur :
Dicts imbriqués, valeurs mutables, .get() avec un défaut — l'outillage de base pour toute donnée en forme d'enregistrement.
On avance
Listes, tuples, sets, dicts. Avec ces quatre collections en main, tu peux modéliser presque toute donnée que tu rencontreras au début. Ensuite, on apprendra la compréhension de liste — la façon compacte de Python de transformer une collection en une autre.
Questions fréquentes
Qu'est-ce qu'un dictionnaire en Python ?
Un dictionnaire est une collection de paires clé-valeur. Tu cherches une valeur par sa clé — prices['apple'] au lieu de prices[0]. Les dictionnaires sont rapides à lire et à écrire, les clés doivent être uniques, et en Python moderne ils préservent l'ordre dans lequel tu as inséré les éléments.
Comment ajouter une clé à un dictionnaire Python ?
Affecte-lui une valeur : my_dict['new_key'] = 'new value'. Si la clé existe déjà, la valeur est écrasée. Sinon, elle est ajoutée. Il n'y a pas de distinction entre « insérer » et « mettre à jour » — c'est la même syntaxe.
Quelle est la différence entre dict[key] et dict.get(key) ?
dict[key] lève KeyError si la clé n'est pas là. dict.get(key) renvoie None (ou une valeur par défaut que tu fournis) à la place. Utilise .get() quand les clés absentes sont attendues et normales ; utilise [key] quand une clé absente est un bug.