Aller au contenu

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.

>>> eleve = {"nom": "Dupont", "prenom": "Marie", "age": 16}

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 :

>>> eleve["classe"]
KeyError: 'classe'

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é

>>> "nom" in eleve
True
>>> "classe" in eleve
False

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

eleve = {"nom": "Dupont", "prenom": "Marie", "age": 16}

for cle in eleve:
    print(cle)

Résultat :

nom
prenom
age

4.2 Parcours des valeurs

for valeur in eleve.values():
    print(valeur)

Résultat :

Dupont
Marie
16

4.3 Parcours des clés et valeurs

for cle, valeur in eleve.items():
    print(f"{cle} : {valeur}")

Résultat :

nom : Dupont
prenom : Marie
age : 16

À 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 :

eleve = ["Dupont", "Marie", 16, "1ere3"]
# eleve[0] = nom, eleve[1] = prenom... pas très lisible

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)