Dictionnaires et ensembles
Associer une valeur à une clé, compter des occurrences, et éliminer les doublons
§1.Quand un index numérique ne suffit plus
Une liste range des valeurs par POSITION : notes[0], notes[1]. C'est parfait quand l'ordre est ce qui compte, et inutilisable quand on veut retrouver une information par son NOM.
Pour stocker les notes d'élèves identifiés par leur prénom, il te faudrait deux listes parallèles — une pour les prénoms, une pour les notes — et prier pour qu'elles restent alignées. Le premier tri casse tout.
Un DICTIONNAIRE règle ça : chaque valeur est rangée sous une CLÉ de ton choix. Comme dans un vrai dictionnaire, où l'on cherche un mot pour obtenir sa définition.
notes = {"Awa": 15, "Moussa": 12, "Fatou": 17} print(notes["Awa"])print(len(notes))print("Moussa" in notes)print("Ibrahima" in notes)Les accolades créent le dictionnaire, les crochets accèdent à une valeur — comme pour une liste, sauf qu'on met une clé au lieu d'un numéro. L'opérateur in teste la présence d'une CLÉ, jamais d'une valeur.
notes = {"Awa": 15} notes["Moussa"] = 12 # ajoute une nouvelle clénotes["Awa"] = 16 # modifie une clé existanteprint(notes["Awa"], notes["Moussa"]) del notes["Moussa"]print(len(notes))La même écriture sert à créer et à modifier : si la clé existe, la valeur est remplacée ; sinon, la paire est ajoutée. Il n'y a pas de méthode append pour un dictionnaire.
§5.Les méthodes essentielles
- .get(cle, defaut)
- Renvoie la valeur si la clé existe, sinon le défaut — sans jamais lever d'erreur. Sans second argument, le défaut est None.
- .keys() / .values()
- Donnent respectivement toutes les clés et toutes les valeurs.
- .items()
- Donne les couples (clé, valeur). C'est la méthode qu'on emploie pour parcourir un dictionnaire entier.
- del d[cle]
- Supprime une paire. Lève une KeyError si la clé n'existe pas.
notes = {"Awa": 15, "Moussa": 12, "Fatou": 17} for prenom, note in sorted(notes.items()): print(prenom, ":", note) print("Moyenne :", round(sum(notes.values()) / len(notes), 2))items() donne les deux à la fois, qu'on récupère en une ligne — la même écriture que enumerate. Ici on passe par sorted() pour garantir l'ordre alphabétique, ce qui est aussi une bonne habitude pour un affichage prévisible.
§8.Le comptage : l'usage numéro un
Compter les occurrences de quelque chose — des mots dans un texte, des votes, des lettres — est le cas d'usage le plus fréquent des dictionnaires, et l'un des plus utiles en pratique.
La clé est l'élément à compter, la valeur son compteur. Toute la difficulté serait de gérer la première rencontre d'un élément, quand le compteur n'existe pas encore. C'est exactement le problème que .get() élimine.
phrase = "le chat mange le poisson et le chat dort" compte = {}for mot in phrase.split(): compte[mot] = compte.get(mot, 0) + 1 for mot, n in sorted(compte.items()): print(mot, n)La ligne centrale mérite d'être relue : « la nouvelle valeur est l'ancienne, ou 0 si elle n'existait pas, plus un ». Sans .get(), il faudrait un if pour distinguer la première rencontre — trois lignes au lieu d'une.
§11.Les ensembles : quand seule l'appartenance compte
Un ENSEMBLE (set) est une collection sans ordre et SANS DOUBLON. On ne peut pas y accéder par index — il ne répond qu'à une question : « est-ce que cet élément est là ? ».
C'est exactement l'outil qu'il faut pour éliminer des répétitions, ou pour comparer deux collections.
nombres = [1, 2, 2, 3, 3, 3, 4]uniques = set(nombres)print(sorted(uniques))print(len(uniques), "valeurs distinctes sur", len(nombres)) a = {1, 2, 3}b = {2, 3, 4}print(sorted(a & b)) # dans les deuxprint(sorted(a | b)) # dans l'un ou l'autreprint(sorted(a - b)) # dans a mais pas dans bLes opérateurs &, | et - reprennent exactement les notations mathématiques de l'intersection, de l'union et de la différence. Comme un ensemble n'a pas d'ordre, on passe par sorted() pour un affichage stable.
§13.Choisir la bonne structure
| Besoin | Structure | Pourquoi |
|---|---|---|
| Garder l'ordre, accepter les doublons | Liste | Indexable, ordonnée, modifiable |
| Retrouver par un nom, une identité | Dictionnaire | Accès direct par clé |
| Compter des occurrences | Dictionnaire | Clé = élément, valeur = compteur |
| Éliminer les doublons | Ensemble | Aucune répétition possible |
| Tester l'appartenance très souvent | Ensemble ou dictionnaire | Recherche quasi instantanée |
Chercher un élément dans une liste oblige à la parcourir ; dans un ensemble ou un dictionnaire, la réponse est immédiate quelle que soit la taille.
À retenir
- Un dictionnaire associe une VALEUR à une CLÉ : d[cle] pour lire, d[cle] = v pour écrire ou créer.
- d[cle] lève une KeyError si la clé manque ; d.get(cle, defaut) ne plante jamais.
- d.items() donne les couples (clé, valeur) — la façon standard de parcourir.
- Le comptage tient en une ligne : compte[x] = compte.get(x, 0) + 1.
- Dans cet atelier, l'ordre des clés n'est pas garanti : trie explicitement avec sorted().
- Un ensemble n'a ni ordre ni doublon ; &, | et - donnent intersection, union et différence.
- Seules les valeurs immuables peuvent être des clés — jamais une liste.