Chapitre 3 : Les dictionnaires¶
Programme officiel (B.O.)¶
B.O. spécial n° 1 du 22 janvier 2019 - NSI Première
| Contenus | Capacités attendues | Commentaires |
|---|---|---|
| Dictionnaires par clés et valeurs | Construire une entrée de dictionnaire. Itérer sur les éléments d'un dictionnaire. | Il est possible de présenter les données composites. Il n'est pas fait référence à la notion de pointeur. |
1. Qu'est-ce qu'un dictionnaire ?¶
1.1 Définition¶
Un dictionnaire est une collection non ordonnée de paires clé : valeur. Chaque clé est unique et permet d'accéder directement à sa valeur associée.
Contrairement aux tableaux (accès par indice numérique), les dictionnaires permettent un accès par nom (la clé).
1.2 Analogie¶
Un dictionnaire Python fonctionne comme un dictionnaire classique :
| Dictionnaire classique | Dictionnaire Python |
|---|---|
| Le mot cherché | La clé |
| La définition trouvée | La valeur |
| On cherche par mot, pas par numéro de page | On accède par clé, pas par indice |
1.3 Syntaxe¶
# Dictionnaire avec des accolades
personne = {
"nom": "Martin",
"prenom": "Léo",
"age": 17,
"nsi": True
}
# Dictionnaire vide
vide = {}
# Avec la fonction dict()
point = dict(x=3, y=7) # {"x": 3, "y": 7}
2. Accéder aux valeurs¶
2.1 Lecture par clé¶
>>> eleve = {"nom": "Dupont", "prenom": "Marie", "age": 16}
>>> eleve["nom"]
'Dupont'
>>> eleve["age"]
16
Si la clé n'existe pas, Python lève une erreur :
Pour éviter l'erreur, on peut utiliser la méthode get() :
>>> eleve.get("classe") # renvoie None si absent
>>> eleve.get("classe", "inconnue") # valeur par défaut
'inconnue'
2.2 Vérifier l'existence d'une clé¶
3. Modifier un dictionnaire¶
3.1 Ajouter ou modifier une entrée¶
Pour ajouter une nouvelle paire clé-valeur ou modifier une existante, on utilise la même syntaxe :
>>> eleve = {"nom": "Dupont", "prenom": "Marie"}
>>> eleve["age"] = 16 # ajout
>>> eleve["classe"] = "1ere3" # ajout
>>> eleve
{'nom': 'Dupont', 'prenom': 'Marie', 'age': 16, 'classe': '1ere3'}
>>> eleve["age"] = 17 # modification
>>> eleve["age"]
17
3.2 Supprimer une entrée¶
>>> del eleve["classe"]
>>> eleve
{'nom': 'Dupont', 'prenom': 'Marie', 'age': 17}
>>> eleve.pop("age") # supprime et renvoie la valeur
17
4. Parcourir un dictionnaire¶
4.1 Parcours des clés¶
Résultat :
4.2 Parcours des valeurs¶
Résultat :
4.3 Parcours des clés et valeurs¶
Résultat :
À retenir
| Méthode | Ce qu'elle renvoie |
|---|---|
d.keys() |
Les clés |
d.values() |
Les valeurs |
d.items() |
Les paires (clé, valeur) sous forme de tuples |
5. Construire un dictionnaire¶
5.1 Construction progressive¶
# Compter les occurrences de chaque lettre
texte = "abracadabra"
compteur = {}
for lettre in texte:
if lettre in compteur:
compteur[lettre] += 1
else:
compteur[lettre] = 1
print(compteur) # {'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1}
5.2 Dictionnaire en compréhension¶
Comme les tableaux, les dictionnaires peuvent se construire par compréhension :
# Carrés des nombres de 0 à 5
>>> carres = {x: x ** 2 for x in range(6)}
>>> carres
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# Codes ASCII des lettres majuscules
>>> ascii_maj = {chr(i): i for i in range(65, 91)}
>>> ascii_maj["A"]
65
5.3 Construire un dictionnaire à partir de deux listes¶
cles = ["nom", "prenom", "age"]
valeurs = ["Dupont", "Marie", 16]
eleve = dict(zip(cles, valeurs))
print(eleve) # {'nom': 'Dupont', 'prenom': 'Marie', 'age': 16}
6. Les clés : quels types ?¶
Les clés d'un dictionnaire doivent être immuables :
| Type | Utilisable comme clé ? |
|---|---|
int |
Oui |
float |
Oui (mais déconseillé) |
str |
Oui (le plus courant) |
tuple |
Oui (si ses éléments sont immuables) |
list |
Non (mutable) |
dict |
Non (mutable) |
# Tuple comme clé (utile pour des coordonnées)
grille = {}
grille[(0, 0)] = "vide"
grille[(1, 2)] = "pion"
7. Dictionnaire vs Tableau¶
| Critère | Tableau (list) |
Dictionnaire (dict) |
|---|---|---|
| Accès par | Indice (numérique) | Clé (nom) |
| Ordre | Oui (indices 0, 1, 2...) | Non garanti |
| Usage | Collections homogènes | Associations clé-valeur |
| Recherche | Lente (parcourir tout le tableau) | Rapide (accès direct par clé) |
| Exemple | Notes d'un élève | Fiche d'un élève |
7.1 Exemple comparatif¶
Avec un tableau, il faut se souvenir des positions :
Avec un dictionnaire, l'accès est explicite :
eleve = {"nom": "Dupont", "prenom": "Marie", "age": 16, "classe": "1ere3"}
print(eleve["prenom"]) # clair et sans ambiguïté
8. Tableaux de dictionnaires¶
Un usage fréquent consiste à stocker une collection d'enregistrements sous forme de tableau de dictionnaires :
eleves = [
{"nom": "Dupont", "prenom": "Marie", "moyenne": 15.5},
{"nom": "Martin", "prenom": "Léo", "moyenne": 12.0},
{"nom": "Durand", "prenom": "Emma", "moyenne": 17.5}
]
# Afficher les prénoms des élèves ayant plus de 14
for e in eleves:
if e["moyenne"] >= 14:
print(e["prenom"])
# Marie
# Emma
Cette structure ressemble à un tableau de données (comme un fichier CSV ou un tableur), chaque dictionnaire étant une ligne.
9. Résumé¶
| Propriété | Dictionnaire (dict) |
|---|---|
| Syntaxe | {"cle": valeur, ...} |
| Accès | d["cle"] ou d.get("cle") |
| Ajout/modification | d["cle"] = valeur |
| Suppression | del d["cle"] ou d.pop("cle") |
| Test d'appartenance | "cle" in d |
| Parcours clés | for k in d: |
| Parcours valeurs | for v in d.values(): |
| Parcours clés + valeurs | for k, v in d.items(): |
| Compréhension | {k: v for k, v in ...} |
| Clés | Doivent être immuables (str, int, tuple) |