Retourner à : Python pour débutants
Pour ce huitième chapitre de notre cours Python, nous allons nous intéresser aux dictionnaires. Nous allons voir :
- ce qu’est un dictionnaire,
- comment créer un dictionnaire
- comment y accéder
- nous verrons également comment modifier une valeur d’un dictionnaire
- on regardera comment effacer des entrées
- et nous verrons également comment utiliser les dictionnaires dans des boucles.
Définition
Un dictionnaire est une structure de données très pratique qui permet d’associer une clé à une valeur. Chaque clé doit être unique dans le dictionnaire, et elle peut être de type entier, chaîne de caractères ou encore booléen. La valeur associée à cette clé peut quant à elle être n’importe quel objet, y compris des structures complexes comme des listes ou d’autres dictionnaires.
Création d’un dictionnaire
Pour créer un dictionnaire vide il suffit d’utiliser des accolades vides {}. Si vous voulons créer un dictionnaire qui va contenir les informations d’une recette de cuisine, nous pouvons créer une variable qu’on va appeler recipe, à laquelle on va assigner nos accolades vides :
recipe = {}
print(recipe)Si on lance le programme on voit bien notre dictionnaire vide dans le terminale :

Pour ajouter des éléments à notre dictionnaire il nous faut maintenant des paires de clés et de valeurs. Pour notre recette, je suggère de d’utiliser les clés « name », « time » et « ingredients » et de leur associer respectivement le nom de notre recette, le temps de préparation et une liste d’ingrédients nécessaires. Pour ajouter ce mapping, on va tout d’abord déclarer une clé, exemple la chaîne de caractères « name », suivi d’un double point « : », et puis à droite du double point la valeur qu’on veut associer à cette clé, par exemple « Apple pie ». Pour finir les différents paires de clés / valeurs sont séparées par une virgule :
recipe = {
"name" : "Apple Pie",
"time": "2h",
"ingredients" : ["Flour", "Sugar", "Egg", "Apple"],
}
print(recipe)Et la si on imprime notre dictionnaire, on voit bien les différentes associations qu’on vient de créer :

Notez que la valeur d’une clé d’un dictionnaire peut également être un dictionnaire. Nous pouvons donc définir faire la chose suivante :
recipe = {
"name" : "Apple Pie",
"time": "2h",
"ingredients" : ["Flour", "Sugar", "Egg", "Apple"],
"steps" : {
"preparation": ["Cut apples", "Prepare dough"],
"cooking": ["Cook for 2h at 200°C"]
}
}
print(recipe)Et comme on peut le voir dans le terminal, si on execute notre code, la clé ‘steps’ a bien un dictionnaire qui lui est associé :

Accéder à des valeurs
Pour accéder à la valeur associée à une clé précise d’un dictionnaire, on utilise fais suivre notre dictionnaire par des crochets [] à l’intérieurs desquels on passe la clé à laquelle on veut accéder. Dans notre exemple si on veut accéder au nom de notre recette on peut faire :
recipe = {
"name" : "Apple Pie",
"time": "2h",
"ingredients" : ["Flour", "Sugar", "Egg", "Apple"],
"steps" : {
"preparation": ["Cut apples", "Prepare dough"],
"cooking": ["Cook for 2h at 200°C"]
}
}
print(recipe["name"])Ce qui nous donne donc « Apple Pie » :

Si on veut accéder à la clé « preparation » du dictionnaire qui est associé à la clé « steps » de notre recette on peut le faire en utilisant les deux clés l’une à la suite de l’autre, donc tout d’abord on fait un recipe[« steps »] pour accéder au dictionnaire contenant les étapes et puis on ajoute des nouveaux crochets et la clé « preparation » comme suit: recipe[« steps »][« preparation »] afin d’accéder à la préparation :
recipe = {
"name" : "Apple Pie",
"time": "2h",
"ingredients" : ["Flour", "Sugar", "Egg", "Apple"],
"steps" : {
"preparation": ["Cut apples", "Prepare dough"],
"cooking": ["Cook for 2h at 200°C"]
}
}
print(recipe["steps"]["preparation"])Ce qui nous donne :

Attention ! Si vous tentez d’accéder à une clé qui n’existe pas de cette manière, votre programme plantera.
Si par exemple on essaie d’accéder à la clé « description » qui n’est pas présente dans notre dictionnaire notre programme s’arrête avec l’erreur :

Pour éviter ce genre d’erreur on peut utiliser la méthode get() des dictionnaires, à laquelle on passe la clé à laquelle on veut accéder. Si la clé existe, get() retourne la valeur associée à cette clé, sinon get() retourne la valeur None:
recipe = {
"name" : "Apple Pie",
"time": "2h",
"ingredients" : ["Flour", "Sugar", "Egg", "Apple"],
"steps" : {
"preparation": ["Cut apples", "Prepare dough"],
"cooking": ["Cook for 2h at 200°C"]
}
}
print(recipe.get("name"))
print(recipe.get("description"))Ici comme name existe, le premier print imprime « Apple Pie », en revanche comme la clé description n’existe pas, le deuxième print imprime la valeur None :

On peut passer un deuxième paramètre à get(), qui contient la valeur par défaut à retourner si jamais la clé passée en paramètre n’existe pas. Donc si nous souhaitons une chaîne de caractères vides au lieu de None si jamais notre clé n’existe pas, on peut faire la chose suivante :
recipe = {
"name" : "Apple Pie",
"time": "2h",
"ingredients" : ["Flour", "Sugar", "Egg", "Apple"],
"steps" : {
"preparation": ["Cut apples", "Prepare dough"],
"cooking": ["Cook for 2h at 200°C"]
}
}
print(recipe.get("name", ""))
print(recipe.get("description", ""))Et donc, maintenant notre deuxième print nous renvoie bien une chaîne de caractères vide :

Modifier les valeurs d’un dictionnaire
Nous pouvons modifier la valeur associée à une clé donnée, en utilisant l’opérateur d’assignation « = » comme pour une variable classique. On peut donc changer le nom de notre recette de la manière suivante :
recipe = {
"name" : "Apple Pie",
"time": "2h",
"ingredients" : ["Flour", "Sugar", "Egg", "Apple"],
"steps" : {
"preparation": ["Cut apples", "Prepare dough"],
"cooking": ["Cook for 2h at 200°C"]
}
}
print(recipe.get("name", ""))
recipe["name"] = "Raspberry Pie"
print(recipe.get("name", ""))Si on regarde le résultat de l’execution de ce code, on voit bien que le nom de la recette change de « Apple Pie » à « Raspberry Pie » :

On peut aussi assigner une valeur à une nouvelle clé de la même manière. Nous pouvons donc ajouter un type à notre recette de la manière suivante:
recipe = {
"name" : "Apple Pie",
"time": "2h",
"ingredients" : ["Flour", "Sugar", "Egg", "Apple"],
"steps" : {
"preparation": ["Cut apples", "Prepare dough"],
"cooking": ["Cook for 2h at 200°C"]
}
}
recipe["name"] = "Raspberry Pie"
recipe["type"] = "pie"
print(recipe)Ce qui nous donne bien :

On peut aussi modifier plusieurs clés en un coup, en utilisant la méthode update() qui prend un dictionnaire en paramètre avec les nouvelles valeurs à associer au dictionnaire. Nous pouvons donc remplacer notre code précédent de la manière suivante, afin de modifier les clés « name » et « type » avec la méthode update() :
recipe = {
"name" : "Apple Pie",
"time": "2h",
"ingredients" : ["Flour", "Sugar", "Egg", "Apple"],
"steps" : {
"preparation": ["Cut apples", "Prepare dough"],
"cooking": ["Cook for 2h at 200°C"]
}
}
recipe.update({
"name": "Raspberry Pie",
"type": "pie"
})
print(recipe)Et on a toujours le même résultat :

Effacer une clé
Imaginons qu’on souhaite effacer une clé de notre dictionnaire, par exemple la clé « steps ». Pour cela on peut utiliser le mot-clé del suivi du dictionnaire auquel on passe la clé à effacer :
recipe = {
"name" : "Apple Pie",
"time": "2h",
"ingredients" : ["Flour", "Sugar", "Egg", "Apple"],
"steps" : {
"preparation": ["Cut apples", "Prepare dough"],
"cooking": ["Cook for 2h at 200°C"]
}
}
recipe.update({
"name": "Raspberry Pie",
"type": "pie"
})
del recipe["steps"]
print(recipe)En executant ce code, on voit que la clé « steps » a bien été effacée :

Attention 1 : Faites bien attention à renseigner une clé qui existe dans le dictionnaire sinon votre code crashera avec une « KeyError »
Attention 2 : Faites aussi attention à toujours renseigner la clé à effacer sinon tout le dictionnaire sera effacer
On peut aussi utiliser la méthode pop() à laquelle on passe une clé en paramètre afin d’effacer la clé en question. pop() a deux particularités. Premièrement pop() retourne la valeur de la clé supprimé, et deuxièmement, on peut lui passer une valeur par défaut. Si on spécifie une valeur par défaut, et que la clé passé à pop() n’existe pas, le programme ne crashera pas et retournera simplement la valeur par défaut en résultat. Nous pouvons donc faire les choses suivantes :
recipe = {
"name" : "Apple Pie",
"time": "2h",
"ingredients" : ["Flour", "Sugar", "Egg", "Apple"],
"steps" : {
"preparation": ["Cut apples", "Prepare dough"],
"cooking": ["Cook for 2h at 200°C"]
}
}
recipe.update({
"name": "Raspberry Pie",
"type": "pie"
})
del recipe["steps"]
deleted_time = recipe.pop("time", "-")
deleted_temperature = recipe.pop("temperature", None)
print(deleted_time)
print(deleted_temperature)
print(recipe)Dans ce code on efface donc la clé « time » et on stock sa valeur dans la variable « deleted_time » et on essaie d’effacer la clé « temperature » qui n’existe pas, pop() nous retourne donc la valeur None, qu’on a spécifié en tant que valeur par défaut.

Itérer sur un dictionnaire
En Python on peut itérer à travers les clés d’un dictionnaire en utilisant une boucle for :
recipe = {
"name" : "Apple Pie",
"time": "2h",
"ingredients" : ["Flour", "Sugar", "Egg", "Apple"],
"steps" : {
"preparation": ["Cut apples", "Prepare dough"],
"cooking": ["Cook for 2h at 200°C"]
}
}
recipe.update({
"name": "Raspberry Pie",
"type": "pie"
})
del recipe["steps"]
deleted_time = recipe.pop("time", "-")
deleted_temperature = recipe.pop("temperature", None)
for key in recipe:
print(f"{key} -> {recipe[key]}")Ce qui nous donne bien chaque clé encore présente dans notre dictionnaire :

Si on veut itérer directement à travers toutes les clés et les valeurs associées, on peut utiliser la méthode items() d’un dictionnaire qui va retourner à chaque itération la clé de l’itération en cours et la valeur associé à celle-ci :
recipe = {
"name" : "Apple Pie",
"time": "2h",
"ingredients" : ["Flour", "Sugar", "Egg", "Apple"],
"steps" : {
"preparation": ["Cut apples", "Prepare dough"],
"cooking": ["Cook for 2h at 200°C"]
}
}
# recipe["name"] = "Raspberry Pie"
# recipe["type"] = "pie"
recipe.update({
"name": "Raspberry Pie",
"type": "pie"
})
del recipe["steps"]
deleted_time = recipe.pop("time", "-")
deleted_temperature = recipe.pop("temperature", None)
for key, value in recipe.items():
print(f"{key} -> {value}")Ce qui nous donne toujours le même résultat :

Félicitation vous savez maintenant comment utiliser les dictionnaires en Python ! Dans le prochain chapitre on verra comment mieux structurer notre code et comment créer des modules.
Ressources
Vous retrouvez ci-dessous un lien vers le code source utilisé dans ce chapitre. Ce lien est uniquement disponible pour les abonnés Standard et Premium.