Débutant40 min25 XP
Objectifs de cette leçon
- Créer et manipuler des dictionnaires
- Parcourir les clés et valeurs
- Comprendre la conversion JSON
Dictionnaires 📖
Qu'est-ce qu'un dictionnaire ? 🤔
Un dictionnaire (dict) associe des cles a des valeurs. C'est comme un vrai dictionnaire : tu cherches un mot (la cle) pour trouver sa definition (la valeur).
personne = { "nom": "Alice", "age": 25, "ville": "Paris" } config = {}
💡 Les cles doivent etre immutables (str, int, tuple, bool). Les valeurs peuvent etre n'importe quel type.
Acceder aux valeurs 🔑
personne = {"nom": "Alice", "age": 25, "ville": "Paris"} # Acces direct print(personne["nom"]) # "Alice" # Acces avec .get() (evite le KeyError) print(personne.get("email")) # None print(personne.get("email", "N/A")) # "N/A" # Verifier l'existence print("nom" in personne) # True print("email" in personne) # False
| Methode | Si la cle existe | Si la cle n'existe pas |
|---|---|---|
dict[cle] | Retourne la valeur | ❌ KeyError |
dict.get(cle) | Retourne la valeur | Retourne None |
dict.get(cle, defaut) | Retourne la valeur | Retourne defaut |
Modifier et ajouter ✏️
personne = {"nom": "Alice", "age": 25} personne["age"] = 26 print(personne) # {'nom': 'Alice', 'age': 26} personne["email"] = "alice@example.com" print(personne) # {'nom': 'Alice', 'age': 26, 'email': 'alice@example.com'} personne.update({"tel": "06 12 34 56 78", "ville": "Paris"})
📌 Si la cle existe deja, la valeur est ecrasee. Sinon, la paire est ajoutee.
Supprimer des elements 🗑️
personne = {"nom": "Alice", "age": 25, "ville": "Paris"} del personne["ville"] print(personne) # {'nom': 'Alice', 'age': 25} age = personne.pop("age") print(age) # 25 tel = personne.pop("tel", "Non renseigne") print(tel) # "Non renseigne" personne.clear() print(personne) # {}
Parcourir un dictionnaire 🔄
capitales = { "France": "Paris", "Allemagne": "Berlin", "Espagne": "Madrid", "Italie": "Rome" } for pays in capitales: print(pays) for capitale in capitales.values(): print(capitale) for pays, capitale in capitales.items(): print(f"La capitale de {pays} est {capitale}")
| Methode | Retourne | Type |
|---|---|---|
.keys() | Les cles | dict_keys |
.values() | Les valeurs | dict_values |
.items() | Les paires | dict_items (tuples) |
Comprehensions de dictionnaires ✨
noms = ["Alice", "Bob", "Charlie"] indices = {nom: i for i, nom in enumerate(noms)} print(indices) # {'Alice': 0, 'Bob': 1, 'Charlie': 2} prix_ht = {"produit_a": 100, "produit_b": 250, "produit_c": 75} prix_ttc = {k: v * 1.20 for k, v in prix_ht.items()} print(prix_ttc) # {'produit_a': 120.0, 'produit_b': 300.0, 'produit_c': 90.0} chers = {k: v for k, v in prix_ht.items() if v > 100} print(chers) # {'produit_b': 250}
Dictionnaires imbriques 🪆
ecole = { "classe_a": { "professeur": "M. Martin", "eleves": ["Alice", "Bob"], "salle": "101" }, "classe_b": { "professeur": "Mme Durand", "eleves": ["Charlie", "Diana"], "salle": "202" } } print(ecole["classe_a"]["professeur"]) # "M. Martin" print(ecole["classe_b"]["eleves"][0]) # "Charlie" ecole["classe_a"]["eleves"].append("Eve") print(ecole["classe_a"]["eleves"]) # ['Alice', 'Bob', 'Eve']
Le lien avec JSON 🌐
import json personne = {"nom": "Alice", "age": 25, "hobbies": ["lecture", "code"]} json_str = json.dumps(personne, indent=2, ensure_ascii=False) print(json_str) data = json.loads(json_str) print(data["nom"]) # "Alice"
| Fonction | Description |
|---|---|
json.dumps(obj) | Python → chaine JSON |
json.dump(obj, f) | Python → fichier JSON |
json.loads(str) | Chaine JSON → Python |
json.load(f) | Fichier JSON → Python |
Operations utiles 🛠️
# Fusion avec ** (toutes versions) defaut = {"theme": "clair", "langue": "fr"} personnalise = {"theme": "sombre", "police": "14px"} config = {**defaut, **personnalise} print(config) # {'theme': 'sombre', 'langue': 'fr', 'police': '14px'}
Patterns utiles 🧩
Compteur avec defaultdict
from collections import defaultdict texte = "bonjour le monde le ciel est bleu le monde" compteur = defaultdict(int) for mot in texte.split(): compteur[mot] += 1 print(dict(compteur)) # {'bonjour': 1, 'le': 3, 'monde': 2, 'ciel': 1, 'est': 1, 'bleu': 1}
Trier un dict par valeur
scores = {"Alice": 85, "Bob": 92, "Charlie": 78} trier = dict(sorted(scores.items(), key=lambda item: item[1], reverse=True)) print(trier) # {'Bob': 92, 'Alice': 85, 'Charlie': 78}
Inverser un dict
original = {"a": 1, "b": 2, "c": 3} inverse = {v: k for k, v in original.items()} print(inverse) # {1: 'a', 2: 'b', 3: 'c'}
Diagramme memoire 🧠
💡 Un dictionnaire est un tableau de hachage (hash table). La recherche par cle est en O(1) — tres rapide !
Pieges a eviter ⚠️
# 1. Modifier un dict pendant l'iteration d = {"a": 1, "b": 2, "c": 3} for key in list(d.keys()): # Copie de securite if d[key] == 2: del d[key] # 2. Utiliser une cle mutable (interdit) # d = {[1,2]: "val"} # TypeError # 3. Oublier .get() quand la cle peut etre absente d.get("cle_absente") # Retourne None
Exercice pour toi 🎯
# Exercice 1 : Compteur de lettres def compter_lettres(texte): compteur = {} for lettre in texte.lower(): if lettre.isalpha(): compteur[lettre] = compteur.get(lettre, 0) + 1 return compteur print(compter_lettres("Bonjour")) # {'b': 1, 'o': 2, 'n': 1, 'j': 1, 'u': 1, 'r': 1} # Exercice 2 : Inverser un dictionnaire def inverser_dict(d): return {v: k for k, v in d.items()} # Exercice 3 : Fusionner deux dictionnaires def fusionner(d1, d2): resultat = d1.copy() resultat.update(d2) return resultat
💡 Astuce : Les dictionnaires sont la structure la plus versatile de Python. Utilise-les pour des objets, des configs, des compteurs, et bien plus !
⚡ Simulateur — Dictionnaires
Étape 1/7📝 Pseudo-code
1personne = {"nom": "Alice", "age": 25}
2print(personne["nom"])
3personne["ville"] = "Paris"
4for cle, val in personne.items():
5 print(f"{cle}: {val}")
⚙️ Exécution
📦 Mémoire
personne
{"nom": "Alice", "age": 25}
🔀 Flux d'exécution
dict créé
3
Création du dictionnaire
On crée un dictionnaire avec des paires clé-valeur entre accolches. Chaque clé est unique.