I) Les dictionnaires

A) Présentation des dictionnaires

Comme les listes, les dictionnaires permettent de “stocker” des données. Chaque élément d’un dictionnaire est composé de 2 parties, on parle de paires clé/valeur.

Voici un exemple de dictionnaire :

mon_dico = {"nom": "Durand", "prenom": "Christophe", "date de naissance": "29/02/1981"}

Nous utilisons des accolades { } pour définir le début et la fin du dictionnaire (alors que nous utilisons des crochets [] pour les listes et les parenthèses pour les tuples).
Dans le dictionnaire ci-dessus, “nom”, “prenom” et “date de naissance” sont des clés et “Durand”, “Christophe” et “29/02/1981” sont des valeurs.
La clé “nom” est associée à la valeur “Durand”, la clé “prenom” est associée à la valeur “Christophe” et la clé “date de naissance” est associée à la valeur “29/02/1981”.

Pour créer un dictionnaire, il est possible de procéder comme suit :

mon_dico = {}
mon_dico["nom"] = "Durand"
mon_dico["prenom"] = "Christophe"
mon_dico["date de naissance"] = "29/02/1981"

À noter qu’il est aussi possible d’écrire :

mon_dico = dict()
mon_dico["nom"] = "Durand"
mon_dico["prenom"] = "Christophe"
mon_dico["date de naissance"] = "29/02/1981"

Il est possible d’obtenir la valeur associée à une clé :

mon_dico = {"nom": "Durand", "prenom": "Christophe", "date de naissance": "29/02/1981"}

val = mon_dico['nom']

Dans le programme ci-dessus, la variable val aura pour valeur Durand.

Il est facile d’ajouter un élément à un dictionnaire (les dictionnaires sont mutables)

mon_dico = {"nom": "Durand", "prenom": "Christophe", "date de naissance": "29/02/1981"}

mon_dico['lieu de naissance'] = 'Paris'

La deuxième ligne du programme ci-dessus a permis d’ajouter la clé lieu de naissance au dictionnaire mon_dico. Cette clé a pour valeur Paris

L’instruction del permet du supprimer une paire “clé/valeur”

Soit le dictionnaire suivant :

mes_fruits = {"poire": 3, "pomme": 4, "orange": 2}

si on exécute la ligne :

del mes_fruits["pomme"]

le dictionnaire mes_fruits n’aura plus que 2 clés : poire et orange

Il est possible de modifier la valeur d’une clé :

mes_fruits = {"poire": 3, "pomme": 4, "orange": 2}
mes_fruits["pomme"] = mes_fruits["pomme"] - 1

Après l’exécution de ce programme, la clé pomme* aura pour valeur 3

Exercice dictionnaire 1

Tapez la ligne suivante :

 mes_fruits = {"poire": 3, "pomme": 4, "orange": 2}

Qu’affiche la variable mes_fruits ?

Exercice dictionnaire 2
 vehicules = {"voiture": 25, "vélo": 55, "train": 20}
 nb = vehicules['vélo']

Quelle est la valeur de la variable nb après l’exécution du programme ci-dessus. Vérifiez votre réponse.

B) Parcourir un dictionnaire avec la boucle for

Parcourir les clés

Il est possible de parcourir un dictionnaire à l’aide d’une boucle for. Ce parcours peut se faire selon les clés ou les valeurs. Commençons par parcourir les clés à l’aide de la méthode keys

Le programme suivant :

mes_fruits = {"poire": 3, "pomme": 4, "orange": 2}

for fruit in mes_fruits.keys():
	print(fruit)

permet d’afficher :

poire
pomme
orange

Attention : vous n’obtiendrez par forcement le même ordre que ci-dessus (surtout si vous utilisez une version un peu ancienne de Python). En effet, les paires clé/valeur ne sont pas ordonnées dans un dictionnaire.

À noter que le .keys() n’est pas obligatoire pour parcourir les clés, on obtient le même résultat avec simplement :

mes_fruits = {"poire": 3, "pomme": 4, "orange": 2}

for fruit in mes_fruits:
	print(fruit)

Parcourir les valeurs

La méthode values permet de parcourir le dictionnaire selon les valeurs :

mes_fruits = {"poire": 3, "pomme": 4, "orange": 2}
for qte in mes_fruits.values():
  print(qte)

Le programme ci-dessus permet d’obtenir :

3
4
2

Les noms de variables Pour chaque variable, beaucoup de noms sont possibles. Nom court, long ? Explicite pour qui ?

  • Les noms longs permettent de comprendre plus facilement, mais alourdissent le code.
  • Les noms courts ont l’avantage de se rapprocher des termes anglophones (+ universels) et rendent la lecture plus agréable.

Dans le cadre précédent nous avons utilisé pour cela qte à la place de quantite, à vous de trouver quand vous programmerez les bons noms de variables :)

Parcourir les clés et les valeurs en même temps

Il est possible de parcourir un dictionnaire à la fois sur les clés et les valeurs en utilisant la méthode items :

mes_fruits = {"poire": 3, "pomme": 4, "orange": 2}

for fruit, qte in mes_fruits.items():
	print (f"{fruit} : {qte}")

l’exécution du programme ci-dessus nous permet d’avoir :

poire : 3
pomme : 4
orange : 2
Exercice boucle for et dictionnaire 1
 tab = []
 vehicule = {"voiture": 25, "vélo": 55, "train": 20}
 for t in vehicule.values():
       if t < 40 :
             tab.append(t)

Quelle est la valeur de la variable tab après l’exécution de ce programme. Vérifiez votre réponse.

Exercice boucle for et dictionnaire 2
 tab = []
 vehicule = {"voiture": 25, "vélo": 55, "train": 20}
 for v,t in vehicule.items():
       if t < 40 :
             tab.append(v)

Quelle est la valeur de la variable tab après l’exécution de ce programme. Vérifiez votre réponse.

Exercice boucle for et dictionnaire 3
 tab = [{'nom': 'toto', 'num': 2}, {'nom': 'titi', 'num': 5},  {'nom': 'tata', 'num': 4}]
 tab_nom =  []
 for t in tab :
       if t['num'] > 3:
             tab_nom.append(t['nom'])

Quelle est la valeur de la variable tab_nom après l’exécution de ce programme. Vérifiez votre réponse.

Exercice boucle for et dictionnaire 4

On utilise un tableau contenant des dictionnaires afin de stocker les notes des élèves Titi, Toto et Tutu :

 [{'nom':'Titi', 'note':12}, {'nom':'Tutu', 'note':11}, {'nom':'Toto', 'note':17}]

La fonction plusHaute prend en paramètre un tableau contenant des dictionnaires (comme celui ci-dessus) et renvoie le nom de l’élève ayant obtenu la meilleure note (on partira du principe que les élèves ont tous des notes différentes).

 def plusHaute(tab):
       nom = ""
       max_note = ...
       for t in ...:
             if t['note'] > ...:
                   max_note = t[...]
                   nom = t[...]
       return ...

Complétez la fonction plusHaute

Lien vers codePuzzle

Exercice boucle for et dictionnaire 5

On utilise un tableau et des dictionnaires pour stocker des noms et des numéros de téléphone :

 [{'nom':'Titi', 'num':987675643}, {'nom':'Tutu', 'num':424224}, {'nom':'Toto', 'num':343235365}]

La fonction numTel prend 2 paramètres :

  • un tableau de dictionnaires tab_tel contenant les noms et les numéros de téléphone (comme celui ci-dessus)
  • un nom n

La fonction numTel doit renvoyer le numéro de téléphone de n si ce dernier existe. Dans le cas où n n’existe pas, la fonction numTel doit renvoyer -1

 def numTel(n, ...):
       for ... in tab_tel:
             if ...  == t['nom']:
                   return ...
       return ...

Lien vers codePuzzle

Exercice boucle for et dictionnaire 6

On utilise un tableau contenant des dictionnaires afin de stocker les notes des élèves Titi, Toto et Tutu :

 [{'nom':'Titi', 'note':12}, {'nom':'Tutu', 'note':11}, {'nom':'Toto', 'note':17}]

La fonction moyenne prend en paramètre un tableau contenant des dictionnaires (comme celui ci-dessus) et renvoie la moyenne des notes.

Écrivez la fonction moyenne

Lien vers codePuzzle