Les dictionnaires sont des objets pouvant en contenir d'autres, un peu comme des listes.

Cependant, au lieu d'héberger des informations dans un ordre précis, ils associent chaque valeur contenue à une clé (qui peut être une chaîne de caractère ou simplement un nombre).

Voyons tout de suite un exemple :

coeffBacS={"ISN":2,"Maths":7}

Dans l'exemple ci-dessus, nous avons créé un dictionnaire coeffBacS. Nous voyons tout de suite que :

  • le caractère servant à délimiter le dictionnaire est l'accolade { }, ce qui le distingue des listes délimitées par des crochets.
  • Il contient deux valeurs : 2 et 7
  • Il contient deux clés : "ISN" et "Maths"

Accéder à une valeur du dictionnaire

Contrairement aux listes ou on accède aux valeurs par la position dans la liste, on accède aux valeurs du dictionnaire par l'intermédiaire des clés. Regardez l'exemple ci-dessous :

coeffBacS["ISN"]

La ressemblance avec les listes pour accéder aux données est assez frappante.

Attention à bien utiliser une clé qui a été définie, sinon...

coeffBacS["MATHS"]

Ici la clé MATHS n'existe pas. En effet le système est sensible aux majuscules !

Savoir si une clé existe dans un dictionnaire

Pour éviter ce type d'erreur, on peut tester l'existance d'une clé par le mot clé Python in

"MATHS" in coeffBacS
"ISN" in coeffBacS

Ajouter des données à un dictionnaire

L'ajout de données se fait très simplement :

coeffBacS["Philo"]=3

Les clés peuvent être de type différents, ainsi que les données :

coeffBacS["Philo"]

Remarque : les clés ne sont pas nécessairement du type chaîne de caractère. Tout type non mutable peut servir de clé. On peut très bien utiliser un nombre comme clé :

# on crée un dictionnaire vide
autreDico=dict()
# on définit des clés sous forme de nombres
autreDico[3.14] = "pi"
autreDico[2.718] = "e"
# il est possible de mélanger les types de clés
# mais ce n'est pas forcément une bonne idée !
autreDico["pi"] = 3.1415
autreDico[3.14]
autreDico["pi"]

Parcourir un dictionnaire

Pour parcourir un dictiionnaire, on va utiliser les méthodes

  • keys() pour récupérer la liste des clés
  • values() pour récupérer la liste des valeurs

Par exemple, affichons toutes les valeurs contenues dans notre dictionnaire

coeffBacS.values()

et de même pour les clés :

coeffBacS.keys()

Pour parcourir un dictionnaire par clés, il suffit de faire une boucle du type :

for matiere in coeffBacS.keys():
    print(matiere , " coeff ", coeffBacS[matiere])

Complétons notre dictionnaire ....

coeffBacS["Francais Oral"]=2
coeffBacS["Physique Chimie"]=6
coeffBacS["SVT"]=6
coeffBacS["HGéo"]=3
coeffBacS["LV1"]=3
coeffBacS["TPE"]=2

Supprimer une clé

On peut supprimer une clé (et sa valeur correspondante) d'un dictionnaire en utilisant, au choix, la méthode del ou la méthode pop.

coeffBacS.pop("Physique Chimie")
coeffBacS["Physique Chimie"]

A vous de jouer...

Ecrire une fonction bacS prenant en paramètre un dictionnaire dont les valeurs sont les coefficients et qui renvoie la somme des coefficients des matières du bac.

def bacS(dico):
    # YOUR CODE HERE
    raise NotImplementedError()
dicoTest = coeffBacS={"ISN":2,"Maths":7, "Francais Oral":2, "Physique Chimie":6, "SVT":6, "HGéo":3, "LV1":3, "TPE":2}

assert bacS(dicoTest) == 31

Exercice

Ecrire une fonction dicoCarres prenant en paramètre un entier $n$ et renvoyant un dictionnaire dont les clés sont les entiers de 1 à $n$ et les valeurs sont les carrés de ces nombres

def dicoCarres(n):
    # YOUR CODE HERE
    raise NotImplementedError()
d = dicoCarres(10)
assert d[5] == 25

Ecrire une fonction inverseDico prenant en paramètre un dicitonnaire d et renvoyant un dictionnaire dont les clés sont les valeurs de d et les valeurs sont les clés correspondantes.

On supposera que les clés et les valeurs sont uniques (comme dans notre dictionnaire des carrés) pour simplifier la tâche.

def inverseDico(d):
    # YOUR CODE HERE
    raise NotImplementedError()
d = dicoCarres(10)
i = inverseDico(d)
assert i[64] == 8