Aller au contenu

Partie 3 : Les dictionnaires


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é).

Un dictionnaire Python fonctionne comme un dictionnaire classique :

Dictionnaire classiqueDictionnaire Python
Le mot cherchéLa clé
La définition trouvéeLa valeur
On cherche par mot, pas par numéro de pageOn accède par clé, pas par indice
# 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}

>>> 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'
>>> "nom" in eleve
True
>>> "classe" in eleve
False

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
>>> del eleve["classe"]
>>> eleve
{'nom': 'Dupont', 'prenom': 'Marie', 'age': 17}
>>> eleve.pop("age") # supprime et renvoie la valeur
17

eleve = {"nom": "Dupont", "prenom": "Marie", "age": 16}
for cle in eleve:
print(cle)

Résultat :

nom
prenom
age
for valeur in eleve.values():
print(valeur)

Résultat :

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

Résultat :

nom : Dupont
prenom : Marie
age : 16

# 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}

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

Section intitulée « 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}

Les clés d'un dictionnaire doivent être immuables :

TypeUtilisable comme clé ?
intOui
floatOui (mais déconseillé)
strOui (le plus courant)
tupleOui (si ses éléments sont immuables)
listNon (mutable)
dictNon (mutable)
# Tuple comme clé (utile pour des coordonnées)
grille = {}
grille[(0, 0)] = "vide"
grille[(1, 2)] = "pion"

CritèreTableau (list)Dictionnaire (dict)
Accès parIndice (numérique)Clé (nom)
OrdreOui (indices 0, 1, 2...)Non garanti
UsageCollections homogènesAssociations clé-valeur
RechercheLente (parcourir tout le tableau)Rapide (accès direct par clé)
ExempleNotes d'un élèveFiche d'un élève

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é

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.


PropriétéDictionnaire (dict)
Syntaxe{"cle": valeur, ...}
Accèsd["cle"] ou d.get("cle")
Ajout/modificationd["cle"] = valeur
Suppressiondel d["cle"] ou d.pop("cle")
Test d'appartenance"cle" in d
Parcours clésfor k in d:
Parcours valeursfor v in d.values():
Parcours clés + valeursfor k, v in d.items():
Compréhension{k: v for k, v in ...}
ClésDoivent être immuables (str, int, tuple)