8. Dictionnaires⚓︎
8.1 Position du problème⚓︎
Un tableau Python possède une seule caractéristique : la valeur portée dans le tableau.
On peut dire que cette valeur est en quelque sorte reliée à une position.
Exemple
Dans le tableau ["0626130029", "0616248329", "0601118218"]
:
"0616248329"
est à la position 1 ;"0601118218"
à la position 2.
Toutefois, si maintenant je souhaite accéder au nom des personnes associées à ces numéros de téléphone, c'est compliqué. Il faudrait un deuxième tableau contenant des noms de personnes à la même position : ["Maman", "Papa", "Médor"]
.
Dans un tableau, la position sert donc de clé primaire (pour dans l'exemple, fusionner deux tableaux).
8.2 Premier contact⚓︎
Il y a beaucoup plus pratique : le dictionnaire.
Comme dans un dictionnaire réel, un dictionnaire Python est composé de deux champs :
- une clé ;
- une valeur.
Exemple
Tout de suite, un exemple :
un_dico = {"nom": "LaTaupe", "prenom": "René", "naissance": 2009}
à comparer avec :
un_tableau = ["LaTaupe", "René", 2009]
.
Cours
Quelques généralités sur les dictionnaires :
- un dictionnaire se caractérise par des accolades {} ;
- les clés sont définies avant les deux points. Les clés peuvent être de n'importe quel type non mutable.
- la valeur associée à la clé est indiquée après les deux points. Les valeurs peuvent être de n'importe quel type.
Exemple
Dans l'exemple précédent :
- quelles sont les clés de
un_dico
? - quelles sont les valeurs associées ?
Solution
La clé nom
est associée à la valeur LaTaupe
, à la clé prenom
est René
et à la clé naissance
, 2009
.
Cours
Il est possible d'initialiser un dictionnaire vide puis de le remplir avec les 4 lignes suivantes :
un_dico = {} # monDico = dict() est une autre syntaxe possible.
un_dico["nom"] = "LaTaupe"
un_dico["prenom"] = "René"
un_dico["naissance"] = 2009
Essayez de créer vous-même ce dictionnaire en recopiant ces instructions.
Créer des dictionnaires
Dans les exercices ci-dessous, créer les dictionnaires demandés.
Dictionnaire nommé genre
qui indique le genre des mots suivants : table
, chemin
, rail
. Le féminin se notera par la lettre 'f'
et le masculin par la lettre 'm'
.
Solution
genre = {}
genre['table'] = 'f'
genre['chemin'] = 'm'
genre['rail'] = 'm'
ou, en une ligne :
genre = {'table' : 'f', 'chemin' : 'm', 'rail' : 'm'}
Dictionnaire nommé film
qui indique les caractéristiques de film :
Pulp Fiction
est associé à['Tarantino', 1994]
Kill Bill
est associé à['Tarantino', 2003]
Holy Grail
est associé à['Monty Python', 1975]
Solution
Remarquez qu'on associe à un clé, un tableau de valeurs.
genre = {}
genre['Pulp Fiction'] = ['Tarantino', 1994]
genre['Kill Bill'] = ['Tarantino', 2003]
genre['Holy Grail'] = ['Monty Python', 1975]
Je déconseille ici la solution sur une ligne, difficile à lire.
8.3 Manipuler des dictionnaires⚓︎
Cours
Pour accéder à la valeur associée à une clé, on utilise la syntaxe : un_dico[clé]
Pour ajouter ou modifier la valeur associée à une clé, on fait simplement : un_dico[clé] = nouvelle_valeur
Exemple
Dans le programme ci-dessous, un dictionnaire a été défini. Sans modifier la ligne de définition,
- afficher la valeur associée à la clé
gamma
; - corriger les valeurs associées aux clés
alpha
etbeta
(respectivement,a
etb
). - ajouter la clé
delta
associée àd
.
Exercice 3
On modélise un panier de fruits de la manière suivante :
- les clés sont les noms des fruits ;
- les valeurs sont la quantité de fruit.
Créer une fonction liste_de_course
qui prend en paramètres un dictionnaire panier
et un fruit fruit
et qui écrit un fruit à acheter dans un dictionnaire. La quantité par défaut est 0.
Cours
On peut boucler sur les clés d'un dictionnaire à l'aide de cette syntaxe.
for clé in un_dictionnaire:
print(clé)
Exemple
- Reprendre votre liste de course obtenue à l'exercice précédent et, à l'aide d'une boucle sur les clé, afficher tous les fruits que vous devez acheter.
- En ajoutant une instruction, afficher quelles sont les quantités actuellement présentes dans votre panier (cela devrait être 0).
Solution
for fruit in panier_de_fruits:
quantité = panier_de_fruits[fruit]
print(fruit, quantité)
Exercice 4
Continuons sur ce panier de fruits.
On peut tester si une clé est présent dans un dictionnaire simplement en le demandant gentiment : clé in un_dictionnaire
.
Créer une fonction ajouter_fruit
qui prend en paramètres un dictionnaire panier
et un fruit fruit
et qui ajoute un fruit dans un dictionnaire. Si un fruit est déjà présent dans le panier, la quantité est augmentée de 1. Sinon, on affiche un message d'erreur : Ce fruit n'est pas sur la liste de courses
.
Exercice 5
Continuons encore sur ce panier de fruits.
En utilisant la fonction ajouter_fruit
et une boucle, créer une fonction avalanche_de_fruits
qui prend en paramètres un dictionnaire panier
et qui ajoute 1 à la quantité de tous les fruits présents dans le dictionnaire panier
.
8.4 Parcours particuliers⚓︎
Cours
De temps en temps, on souhaite parcourir les valeurs plutôt que les clés. On réalise cette opération à l'aide de la syntaxe suivante :
for valeur in un_dictionnaire.values():
print(valeur)
Exemple
Faire la moyenne des valeurs du dictionnaire :
Solution
```python moyenne_FV = {'1G1' : 12, '1G2' : 14.3, '1G3' : 15.6, '1G4' : 11.3}
moyenne = 0 for note in moyenne_FV.values(): moyenne = moyenne + note / len(moyenne_FV)
print(moyenne)
De temps en temps, on souhaite parcourir les clés et les valeurs simultanément. On réalise cette opération à l'aide de la syntaxe suivante :
for clé, valeur in un_dictionnaire.items():
print(clé, valeur)