les dictionnaires en python
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 :
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 !
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
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"]
Pour parcourir un dictiionnaire, on va utiliser les méthodes
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
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"]
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
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