Un dictionnaire Python associe une clé à une valeur : un nom à un âge, un identifiant à un utilisateur, un code produit à un prix. C’est l’une des structures les plus utiles dès qu’il faut retrouver une information sans parcourir toute une liste. Pour bien l’utiliser, il faut comprendre sa logique, sa syntaxe et quelques pièges classiques, comme les clés absentes ou les clés non immuables.
Comprendre le principe clé-valeur avant d’écrire du code
Un dictionnaire est une structure de données mutable : vous pouvez ajouter, modifier ou supprimer des éléments après sa création. Chaque élément repose sur une clé unique et une valeur associée. La clé sert d’étiquette, la valeur contient l’information que vous voulez stocker.
Quiz : Dictionnaires Python
Par exemple, au lieu de mémoriser un utilisateur dans une liste avec des positions peu lisibles, vous pouvez le représenter avec des noms explicites :
utilisateur = {« nom »: « Nadia », « age »: 32, « ville »: « Lyon »}
Ici, « nom », « age » et « ville » sont les clés. Les valeurs correspondantes sont « Nadia », 32 et « Lyon ». Cette représentation rend le code plus lisible qu’une liste du type [« Nadia », 32, « Lyon »], où il faut se souvenir que l’index 0 correspond au nom, l’index 1 à l’âge, et ainsi de suite.
Dictionnaire, liste ou tuple : lequel choisir ?
Une liste est pratique quand l’ordre et la position comptent : les éléments sont accessibles par index 0, 1, 2… Un tuple ressemble à une liste, mais il est immuable ; on l’utilise souvent pour représenter un ensemble fixe de valeurs. Le dictionnaire, lui, est préférable quand vous voulez accéder directement à une information par son nom ou son identifiant.
| Structure | Accès principal | Mutable | Cas d’usage courant |
|---|---|---|---|
| Liste | Index | Oui | Série d’éléments ordonnés |
| Tuple | Index | Non | Données fixes |
| Dictionnaire | Clé | Oui | Données nommées, configuration, objets structurés |
Dans un exemple de 1000 utilisateurs, chercher une personne par identifiant dans un dictionnaire est plus naturel que parcourir une liste à la main. On écrit directement utilisateurs[42] si 42 est une clé, au lieu de tester chaque élément jusqu’à trouver le bon. Cette logique reste simple à lire et évite de dépendre d’un ordre artificiel.
Créer un dictionnaire Python proprement
La façon la plus directe de créer un dictionnaire consiste à utiliser des accolades. On peut créer un dictionnaire vide, puis le remplir, ou bien déclarer immédiatement ses paires clé-valeur.
profil = {}
produit = {« nom »: « Clavier », « prix »: 49.9, « stock »: 12}
La fonction dict() permet aussi de construire un dictionnaire, notamment lorsque les clés sont des noms simples :
produit = dict(nom= »Clavier », prix=49.9, stock=12)
On peut également créer un dictionnaire à partir d’une liste de tuples, ce qui est utile lorsque les données arrivent déjà sous forme de paires :
donnees = [(« fr », « France »), (« es », « Espagne »), (« it », « Italie »)]
pays = dict(donnees)
Les clés doivent être immuables
Une règle importante : une clé de dictionnaire doit être immuable. Les chaînes de caractères, les nombres et les tuples composés d’éléments immuables peuvent servir de clés. En revanche, une liste ne peut pas être utilisée comme clé, car elle peut changer après sa création.
coordonnees = {(48.8566, 2.3522): « Paris »}
Cette écriture fonctionne parce que le tuple (48.8566, 2.3522) est immuable. À l’inverse, une clé comme [« Paris », « France »] provoquerait une erreur, car Python ne peut pas garantir une référence stable pour retrouver la valeur.
Le choix des clés a un impact direct sur la clarté du script. Une bonne clé transforme un bloc de données confus en système d’accès lisible. Avant de remplir un dictionnaire, demandez-vous quelle question votre programme posera le plus souvent. S’il demande “quel est le prix de ce produit ?”, la clé doit probablement être un identifiant produit. S’il demande “quelles informations ai-je sur cet utilisateur ?”, la clé peut être un identifiant utilisateur. Cette réflexion évite les dictionnaires mal orientés, où l’on stocke tout correctement mais où l’on cherche ensuite les informations dans le mauvais sens.
Lire, ajouter, modifier et supprimer des éléments
Pour accéder à une valeur, on utilise sa clé entre crochets. C’est simple, mais cela suppose que la clé existe réellement.
produit = {« nom »: « Clavier », « prix »: 49.9}
nom = produit[« nom »]
Si vous demandez une clé absente, Python déclenche une erreur KeyError. Pour éviter cela, la méthode get() est souvent plus sûre, surtout quand les données viennent d’un formulaire, d’un fichier ou d’une API.
stock = produit.get(« stock », 0)
Ici, si la clé « stock » n’existe pas, la variable stock vaut 0. Cette valeur par défaut permet de continuer l’exécution sans interrompre le programme.
Ajouter ou modifier une valeur
La même syntaxe sert à ajouter une nouvelle entrée ou à modifier une entrée existante. Si la clé n’existe pas, elle est créée. Si elle existe déjà, sa valeur est remplacée.
produit[« stock »] = 12
produit[« prix »] = 44.9
Cette simplicité est l’un des avantages majeurs du dictionnaire. Elle permet de construire progressivement une structure de données, par exemple pendant le traitement d’un fichier CSV ou la préparation d’une réponse JSON.
Supprimer une entrée sans mauvaise surprise
Pour supprimer une clé, vous pouvez utiliser del si vous êtes certain qu’elle existe :
del produit[« stock »]
La méthode pop() est souvent plus pratique, car elle supprime l’entrée et renvoie sa valeur. Elle peut aussi recevoir une valeur par défaut si la clé est absente.
ancien_prix = produit.pop(« prix », None)
Pour vider entièrement un dictionnaire, utilisez clear(). Cette méthode conserve l’objet dictionnaire, mais retire toutes ses entrées.
Parcourir un dictionnaire avec les bonnes méthodes
Par défaut, une boucle for sur un dictionnaire parcourt ses clés. C’est pratique lorsque vous voulez inspecter ou filtrer les entrées disponibles.
for cle in produit:
print(cle)
Pour être plus explicite, vous pouvez utiliser keys(), mais ce n’est pas obligatoire dans une boucle simple :
for cle in produit.keys():
print(cle)
Parcourir les valeurs ou les paires complètes
Si vous avez seulement besoin des valeurs, utilisez values(). Si vous avez besoin à la fois de la clé et de la valeur, items() est la méthode la plus lisible.
for valeur in produit.values():
print(valeur)
for cle, valeur in produit.items():
print(cle, valeur)
Cette dernière forme est très fréquente dans les scripts réels : génération d’un affichage, vérification de paramètres, conversion de données ou construction d’un rapport. Elle évite d’écrire une boucle sur les clés puis de récupérer chaque valeur séparément. Elle reste aussi plus facile à relire quand le dictionnaire contient plusieurs champs.
Filtrer avec une compréhension de dictionnaire
Une compréhension de dictionnaire permet de créer un nouveau dictionnaire en une ligne, à partir d’un dictionnaire existant. C’est utile pour filtrer ou transformer des données tout en gardant un code compact.
prix = {« clavier »: 49.9, « souris »: 19.9, « ecran »: 179.0}
prix_eleve = {nom: montant for nom, montant in prix.items() if montant > 50}
Le résultat contient uniquement les produits dont le prix est supérieur à 50. Cette syntaxe reste lisible si la condition est simple ; si la logique devient longue, une boucle classique sera souvent plus claire.
Méthodes utiles et bonnes pratiques à retenir
Quelques méthodes reviennent souvent dans les projets Python. update() fusionne ou met à jour plusieurs clés d’un coup. setdefault() récupère une valeur existante ou crée la clé avec une valeur par défaut. fromkeys() fabrique un dictionnaire à partir d’une série de clés. copy() crée une copie superficielle du dictionnaire.
| Méthode | Rôle | Exemple d’usage |
|---|---|---|
| get() | Lire sans déclencher KeyError | profil.get(« email », « ») |
| update() | Ajouter ou remplacer plusieurs valeurs | profil.update({« ville »: « Paris »}) |
| pop() | Supprimer et récupérer une valeur | profil.pop(« age », None) |
| setdefault() | Créer une clé si elle manque | compteurs.setdefault(« clics », 0) |
| fromkeys() | Créer plusieurs clés avec une même valeur | dict.fromkeys([« a », « b »], 0) |
Gérer les dictionnaires imbriqués
Un dictionnaire peut contenir d’autres dictionnaires. C’est courant pour représenter des données structurées, comme des utilisateurs, des paramètres d’application ou des réponses d’API.
utilisateurs = {1: {« nom »: « Nadia », « role »: « admin »}, 2: {« nom »: « Paul », « role »: « lecteur »}}
role = utilisateurs[1][« role »]
Cette puissance demande un peu de discipline. Plus les niveaux d’imbrication augmentent, plus le code peut devenir fragile. Pour un accès sécurisé, combinez get() à chaque niveau lorsque les données ne sont pas garanties :
nom = utilisateurs.get(3, {}).get(« nom », « Inconnu »)
Éviter les pièges les plus fréquents
Le premier piège consiste à accéder directement à une clé incertaine avec les crochets. Préférez get() ou testez la présence avec if « cle » in dictionnaire. Le deuxième piège est d’utiliser des clés incohérentes, par exemple parfois « id », parfois « ID ». Python distingue les majuscules et les minuscules.
Enfin, ne transformez pas tout en dictionnaire par réflexe. Si vous stockez simplement une suite de valeurs homogènes, une liste suffit. Si vous manipulez une donnée fixe et courte, un tuple peut être plus approprié. Le dictionnaire devient vraiment pertinent quand le nom de l’information compte autant que sa valeur.
Pour aller plus loin, la documentation officielle Python sur les dictionnaires reste une référence fiable. Après avoir compris les bases, le meilleur exercice consiste à créer un petit carnet d’adresses, un compteur de mots ou une configuration d’application : trois cas simples qui mobilisent la création, l’accès sécurisé, la mise à jour et l’itération.
