cours1 min de lecture
Une collection de paires clé → valeur — l'accès par étiquette plutôt que par position, et toutes les opérations courantes.
programme

Introduction

Avec une liste, on accède à un élément par sa position : notes[2]. Mais souvent, on n'a pas de position naturelle — on veut retrouver une valeur à partir d'une étiquette. Combien de roues a un vélo ? Quel est le téléphone de Camille ? Quelle est la latitude associée à Paris ?

Pour ces situations, Python propose le dictionnaire (type dict) : une collection de paires clé → valeur, dans laquelle on retrouve une valeur en présentant sa clé. C'est l'analogue informatique du dictionnaire de langue : la clé est le mot, la valeur est sa définition. Voir .

Créer un dictionnaire

Un dictionnaire s'écrit entre accolades, chaque entrée sous la forme clé: valeur, séparées par des virgules.

roues = {"voiture": 4, "vélo": 2, "tricycle": 3, "moto": 2}
print(roues)
# Sortie : {'voiture': 4, 'vélo': 2, 'tricycle': 3, 'moto': 2}
print(type(roues))   # <class 'dict'>
print(len(roues))    # 4

Le dictionnaire vide se note {}.

Les clés sont en général des chaînes de caractères, mais peuvent aussi être des entiers, des tuples, ou tout objet non modifiable. Les valeurs, elles, peuvent être de n'importe quel type, y compris une autre liste ou un autre dictionnaire.

Lire une valeur — accès par clé

On utilise les crochets avec la clé entre guillemets (si c'est une chaîne).

roues = {"voiture": 4, "vélo": 2, "tricycle": 3, "moto": 2}
print(roues["voiture"])   # 4
print(roues["vélo"])      # 2
Demander une clé absente lève une KeyError :
print(roues["camion"])
# KeyError: 'camion'
Pour éviter ce piège, deux options :
"camion" in roues          # True ou False — test d'appartenance
roues.get("camion", 0)     # renvoie 0 si la clé est absente, pas d'erreur

::self-eval-qcm{slug="dictionnaires-c1" correct="1" explanation="La clé \\"b\\" est bien présente et lui est associée la valeur 2."} #question Avec d = {\"a\": 1, \"b\": 2, \"c\": 3}, que vaut d[\"b\"] ? #choices

  • 1
  • 2
  • 3
  • KeyError ::

dict vs list — accès par clé vs par index

C'est la distinction essentielle à comprendre :

listdict
Délimiteurs[ ]{ }
On accède parun index entier : t[0]une clé : d["voiture"]
Ordre des élémentssignificatif (positions)conservé d'insertion mais sans signification logique
Quand l'utiliserles éléments sont ordonnés ou anonymesles éléments ont une étiquette parlante

Exemple parlant — un carnet d'adresses :

# Avec une liste, il faudrait connaître l'ordre des entrées
contacts_liste = ["0612345678", "0698765432", "0611112222"]
# qui a quel numéro ?

# Avec un dictionnaire, la clé porte l'information
contacts = {"Camille": "0612345678",
            "Dominique": "0698765432",
            "Alex": "0611112222"}
print(contacts["Camille"])   # 0612345678

Ajouter, modifier, supprimer une entrée

Ajouter ou modifier

L'écriture est la même pour les deux opérations : dico[clé] = valeur. Python ajoute l'entrée si la clé est nouvelle, ou écrase la valeur si la clé existe déjà.

roues = {"voiture": 4, "vélo": 2}

# Ajouter
roues["tricycle"] = 3
print(roues)   # {'voiture': 4, 'vélo': 2, 'tricycle': 3}

# Modifier
roues["voiture"] = 6   # une voiture de course à 6 roues, par exemple
print(roues)   # {'voiture': 6, 'vélo': 2, 'tricycle': 3}

Supprimer

del roues["vélo"]
print(roues)   # {'voiture': 6, 'tricycle': 3}

::self-eval-qcm{slug="dictionnaires-c2" correct="1" explanation="On ajoute y → 2, puis on remplace la valeur de x (qui passe de 1 à 10). Résultat : {\"x\": 10, \"y\": 2}."} #question Que contient d après d = {"x": 1} puis d["y"] = 2 puis d["x"] = 10 ? #choices

  • {"x": 1, "y": 2}
  • {"x": 10, "y": 2}
  • {"y": 2}
  • {"x": 10} ::

Parcourir un dictionnaire — keys, values, items

Trois méthodes essentielles permettent de parcourir un dictionnaire dans une boucle for.

keys() — toutes les clés

roues = {"voiture": 4, "vélo": 2, "tricycle": 3}
for cle in roues.keys():
    print(cle)
# Sortie :
# voiture
# vélo
# tricycle
for cle in roues: (sans .keys()) fait exactement la même chose — le parcours par défaut d'un dictionnaire itère sur ses clés. Les deux formes sont équivalentes ; .keys() rend l'intention plus explicite.

values() — toutes les valeurs

for v in roues.values():
    print(v)
# Sortie :
# 4
# 2
# 3

items() — couples (clé, valeur)

C'est la forme la plus utile : à chaque tour de boucle, on récupère un tuple (clé, valeur) qu'on peut déballer en deux variables.

for cle, valeur in roues.items():
    print(f"{cle}{valeur} roues")
# Sortie :
# voiture → 4 roues
# vélo → 2 roues
# tricycle → 3 roues
⏵ Ctrl+↵ pour exécuter
Aucune exécution pour l'instant.

Application — les données EXIF d'une photo

Le BO suggère l'exemple des données EXIF d'une image (date, modèle d'appareil, orientation, etc.) comme cas d'usage typique du dictionnaire. Chaque champ EXIF est en effet une paire étiquette → valeur.

exif = {
    "modele": "iPhone 13",
    "date": "2026-05-14",
    "orientation": "paysage",
    "largeur": 4032,
    "hauteur": 3024,
}

print(exif["modele"])     # iPhone 13
print(exif["largeur"])    # 4032

for champ, valeur in exif.items():
    print(f"{champ}: {valeur}")

Pièges courants

  • Accès à une clé absente : lève KeyError. Utiliser clé in dico pour tester, ou dico.get(clé, défaut) pour fournir une valeur de repli.
  • Confondre [ ], ( ), { } : crochets = liste, parenthèses = tuple, accolades = dictionnaire.
  • Vouloir indexer un dictionnaire par 0, 1, 2… : un dictionnaire ne se parcourt pas par position. Si vous avez besoin d'un ordre numérique, c'est une liste qu'il vous faut.

Vérification de compréhension

Quelle méthode renvoie des couples (clé, valeur) pour parcourir un dictionnaire ?