Les dictionnaires en Python
Les dictionnaires sont l’un des types les plus puissants et flexibles de Python.
Utilisés pour stocker des paires clé-valeur, ils permettent d’organiser des données de manière claire, efficace et rapide à consulter.
Ils sont omniprésents dans la programmation Python : configurations, résultats d’API, comptages, structures JSON, etc.
Syntaxe d'un dictionnaire
Comme nous l'avons vu, un dictionnaire Python est une collection non ordonnée, mutable et indexée par des clés uniques.
Sa syntaxe est très simple :
mon_dict = {
"nom": "Alice",
"age": 30,
"ville": "Paris"
}
Ici :
"nom"
,"age"
,"ville"
sont des clés (keys 🇺🇸) ;"Alice"
,30
,"Paris"
sont les valeurs (values 🇺🇸).
Contrairement aux listes, les éléments sont accédés par leur clé, pas leur position.
Créer un dictionnaire
Il existe deux méthodes pour créer un dictionnaire.
Méthode #1 : avec les accolades
La première méthode qui permet de créer une dictionnaire est avec les accolades {}
.
utilisateur = {"id": 101, "pseudo": "magicien", "abonne": True}
Méthode #2 : avec la méthode dict()
Enfin une seconde façon permettant de créer un dictionnaire est avec l'utilisation de la méthode dict()
.
utilisateur = dict(id=101, pseudo="magicien", abonne=True)
Le constructeur
dict()
est pratique mais n'accepte que des noms de clé valides en tant qu'identifiants Python (pas d'espaces ou de tirets).
Accéder à une valeur dans un dictionnaire
Accéder à une valeur est très simple dans un dictionnaire avec Python : il suffit d'utiliser leurs clés.
utilisateur = {"pseudo": "hugo"}
print(utilisateur["pseudo"]) # hugo
Si nous tentons d'accéder à une clé qui n'existe pas, une erreur sera provoquée.
PYTHONprint(utilisateur["email"]) # ❌ KeyError
Pour éviter ceci, il est possible d'utiliser la méthode
get()
qui permet d'éviter une erreur si la clé est manquante (très utile pour les données qui viennent des APIs).PYTHONprint(utilisateur.get("email")) # None print(utilisateur.get("email", "N/A")) # N/A
Ici, "N/A" est affiché uniquement si la clé
Ajouter ou modifier une valeur
L’ajout ou la mise à jour d’un élément dans un dictionnaire se fait avec une assignation directe :
profil = {"pseudo": "arthur"}
profil["email"] = "arthur@example.com" # Ajout
profil["pseudo"] = "arthur42" # Modification
Facile, non ? 😬
Si la clé n’existe pas, elle est créée. Si elle existe, sa valeur est écrasée.
Ajouter plusieurs éléments d'un coup
Envie d'ajouter plusieurs éléments d'un seul coup ? Il est possible d'utiliser update()
.
profil.update({"age": 29, "pays": "France"})
Supprimer une valeur
Pour supprimer un élément d'un dictionnaire, nous pouvons utiliser une des trois méthodes disponibles avec le langage Python : del
, pop()
et pop(key, default)
.
Méthode #1 : del
del profil["email"]
Cette première méthode lève une erreur si la clé n'existe pas (KeyError
).
Méthode #2 : pop()
Cette seconde méthode permet de supprimer une valeur sans lever d'erreur si l'élément n'existe pas.
pseudo = profil.pop("pseudo") # Supprime et retourne la valeur
Méthode #3 : pop(key, default)
Enfin cette dernière méthode reprend la méthode deux en ajoutant une subtilité : la possibilité de définir une valeur par défaut pour éviter tout plantage.
profil.pop("non_existant", "rien") # Ne lève pas d'erreur
Supprimer tous les éléments d'un dictionnaire en Python
Pour supprimer tous les éléments dans un dictionnaire, il est possible d'utiliser la méthode clear()
.
profil.clear()
Parcourir un dictionnaire
Parcourir les clés
profil = {"pseudo": "arthur"}
for cle in profil.keys():
print(cle) # pseudo
Il est aussi possible d'éviter d'expliciter "
keys()
" mais il s'agit d'une bonne pratique à garder pour éviter tout problème de confusion.PYTHONfor cle in profil: print(cle) # Meme resultat ici
Parcourir les valeurs
profil = {"pseudo": "arthur"}
for valeur in profil.values():
print(valeur) # arthur
Parcourir les paires clé/valeur
profil = {"pseudo": "arthur"}
for cle, valeur in profil.items():
print(f"{cle} : {valeur}") # pseudo : arthur
items()
est indispensable quand vous avez besoin à la fois de la clé et de la valeur.
Vérifier la présence d'une clé dans un dictionnaire
Avant d’accéder à une valeur, on peut tester si une clé existe dans le dictionnaire à l’aide de l’opérateur in
:
profil = {"pseudo": "hugo", "email": "hugo@example.com"}
if "email" in profil:
print("Adresse trouvée")
Ceci est à éviter pour empêcher une erreur d'éxecution :
PYTHONif profil["email"]: # Risque KeyError si la clé n'existe pas
Les compréhension de dictionnaire
Python permet de créer un dictionnaire en une seule ligne grâce à une compréhension de dictionnaire (dict comprehension 🇺🇸), similaire à une compréhension de liste (list comprehension 🇺🇸).
Syntaxe
{cle: valeur for element in iterable}
Exemple #1 : Créer un dictionnaire de carrés
carres = {x: x**2 for x in range(5)}
print(carres) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
Exemple #2 : Filtrer un dictionnaire existant
notes = {"Alice": 18, "Bob": 12, "Chloé": 8}
admis = {k: v for k, v in notes.items() if v >= 10}
La compréhension de dictionnaire est idéale pour transformer ou filtrer des données de manière concise et lisible.
Copier un dictionnaire
Il existe deux méthodes pour copier un dictionnaire : copy()
et dict()
.
Méthode #1 : copy()
Cette première méthode fait une copie superficielle (c'est-à-dire du premier niveau) sur un dictionnaire. On parle de shallow copy.
copie = profil.copy()
Pour faire une copie profonde (avec les contenus de tous les éléments imbriqués) nous devons utiliser copy.deepcopy()
:
import copy
copie_totale = copy.deepcopy(original)
Méthode #2 : dict()
Pour créer une copie d'un dictionnaire nous avons aussi la possibilité de créer ... un dictionnaire d'un dictionnaire ! 👀
copie = dict(profil)
Fusionner deux dictionnaires
Python offre plusieurs façons d’unir deux dictionnaires.
Méthode #1 : avec update()
a = {"nom": "Alice"}
b = {"age": 30}
a.update(b)
print(a) # {'nom': 'Alice', 'age': 30}
Cette méthode modifie le dictionnaire a
directement.
Méthode #2 : avec l'opérateur "|"
Depuis Python 3.9+ il est possible également d'effectuer une fusion entre plusieurs dictionnaires grâce à l'opérateur |
.
a = {"nom": "Alice"}
b = {"age": 30}
fusion = a | b
print(fusion) # Idem
Cette méthode est différente de la première méthode avec
update()
car elle retourne un nouveau dictionnaire sans modifiera
/b
.
Trier un dictionnaire
Nous pouvons trier un dictionnaire grâce à ses clés ou grâce à ses valeurs.
Trier par clé
d = {"b": 2, "a": 1, "c": 3}
trie_clefs = dict(sorted(d.items()))
Trier par valeur
trie_valeur = dict(sorted(d.items(), key=lambda x: x[1]))
Méthodes utiles sur les dictionnaires
Voici un aperçu des méthodes les plus fréquemment utilisées sur les dictionnaires.
Méthode | Description |
keys() | Retourne un itérable sur les clés |
values() | Retourne un itérable sur les valeurs |
items() | Retourne un itérable sur les paires clé/valeur |
get(k) | Retourne la valeur ou None |
pop(k) | Supprime et retourne la valeur |
update() | Ajoute ou remplace des éléments |
clear() | Vide le dictionnaire |
copy() | Fait une copie superficielle |
Les dictionnaires imbriqués
Un dictionnaire imbriqué est un dictionnaire dont certaines valeurs sont elles-mêmes des dictionnaires.
C’est très courant pour représenter des structures de données complexes, comme du JSON ou des configurations hiérarchiques.
Exemple
utilisateur = {
"nom": "Alice",
"profil": {
"ville": "Paris",
"age": 30
}
}
Accéder à une valeur imbriquée
print(utilisateur["profil"]["ville"]) # Paris
Modifier une valeur imbriquée
utilisateur["profil"]["age"] = 31
Il est possible très facilement de parcourcir un dictionnaire imbriqué grâce à plusieurs boucles.
Questions fréquentes sur les tableaux
Faisons un point sur les questions que se posent le plus ceux qui débutent avec les tableaux en Python !
Quelle est la différence entre
dict()
et{}
?
Les deux créent un dictionnaire, mais :
{}
est plus rapide et plus lisible ;dict()
est utile avec des paires ou des mots-clés.
Quelle différence entre
get()
et[]
?
[]
lève une erreur si la clé est absente alors que get()
retourne None
(ou une valeur par défaut).
Quelle est la meilleure façon d'apprendre Python aujourd'hui ?
Avec notre formation dédiée à Python dans sa dernière version. 💫