Les dictionnaires en Python (appelés aussi tableaux associatifs ou table de hachage), permettent d'associer des valeurs à des clés. A partir d'une clé, on peut accéder à la valeur qui lui est associée.
str, int, float
, tuple de nombre, tuple de tuple de nombre... mais pas de type list ou un tuple de liste.
dict
.
mon_dictionnaire={}
mon_dictionnaire[clé]=valeur
mon_dictionnaire={clé1:valeur1,clé2:valeur2,...}
En utilisant la fonction dict()
:
dictionnaire=dict(clé1=valeur1,clé2,valeur2,...)
Remarque : La fonction dict()
permet aussi de convertir une liste de liste à 2 éléments en dictionnaire.
Exemples :
# dictionnaire vide
dico_en_fr={}
# ajout des cles et des valeurs
dico_en_fr["yes"]="oui"
dico_en_fr["no"]="non"
dico_en_fr["why"]="pourquoi"
# définition directe d'un dictionnaire
dico_es_fr={"si":"oui","hoy":"aujourd'hui","porque":"pourquoi"}
# définition d'un dictionnaire en utilisant la fonction dict
dico_en_fr_nb=dict(one=1,two=2,three=3)
# transformation d'une liste de tuple à 2 éléments
liste_es_nb=[("uno",1),("dos",2),("tres",3)]
dico_es_nb=dict(liste_es_nb)
# définition d'un dictionnaire par compréhension
suite_carre={x:x**2 for x in range(5)}
Les méthodes keys
et values
donnent accès aux clés ou au valeurs. La méthode items donne accès à l'ensemble des couples.
In : dico_en_fr.keys()
Out : dict_keys(['yes', 'no', 'why'])
Le mot clé in
permet de tester l'appartenance d'une clé à un dictionnaire mais pas d'une valeur.
In : "yes" in dico_en_fr
Out : True
La variable d'itération d'une boucle for
sur un dictionnaire est une clé.
In : element = []
In : for objet in dico_es_fr:
: element.append(objet):
In : element
Out : ['si', 'hoy', 'porque']
Il est possible d'itérer sur les couples clés-valeurs en utilisant la méthode items
.
In : for cle,valeur in dico_es_nb.items():
...: print(cle,valeur)
...:
uno 1
dos 2
tres 3
L'instruction valeur=dictionnaire[clé]
permet d'obtenir la valeur du dictionnaire correspondante à la clé. Si la clé n'existe pas, une erreur arrête le programme.
La méthode get permet d'éviter ce type de problème
: L'instruction valeur=dictionnaire.get[clé]
renvoie la valeur correspondante à la clé si elle existe, sinon elle renvoie None
.
In : variable = dico_en_fr["yes"]
In : variable
Out : 'oui'
In : variable=dico_en_fr["what"]
Traceback (most recent call last):
File "", line 1, in
variable=dico_en_fr["what"]
KeyError: 'what'
In : variable = dico_en_fr.get("what")
In : print(variable)
None
Le contenu d'un dictionnaire peut être modifié en remplaçant la valeur associée à une clé par une autre valeur.
On utilise pour cela la syntaxe d'affectation : dictionnaire[clé]=nouvelle_valeur
.
Remarque : Si clé
existe, sa valeur sera modifiée en nouvelle_valeur. Si clé
n'existe pas, un nouvel élément est crée dans le dictionnaire.
In : dico_es_nb["cuatro"]=5
In : dico_es_nb
Out : {'uno': 1, 'dos': 2, 'tres': 3, 'cuatro': 5}
In : dico_es_nb["cuatro"]=4
In : dico_es_nb
Out : {'uno': 1, 'dos': 2, 'tres': 3, 'cuatro': 4}
La fonction len()
renvoie la longueur d'un dictionnaire.
In : len(dico_en_fr)
Out : 3
On peut supprimer une entrée du dictionnaire avec l'instruction del()
.
On peut vider un dictionnaire avec la méthode clear()
.
In : del(dico_en_fr["no"])
In : dico_en_fr
Out : {'yes': 'oui', 'why': 'pourquoi'}
In : dico_en_fr.clear()
In : dico_en_fr
Out : {}
Copie d'un dictionnaire
Les comportements sont similaires à ceux rencontrés avec les listes.
In : dico = {"cle1":"valeur1","cle2":"valeur2"}
In : copie=dico
In : copie
Out : {'cle1': 'valeur1', 'cle2': 'valeur2'}
In : copie.clear()
In : copie
Out : {}
In : dico
Out : {}
Dans l'exemple ci-dessus, dico
et copie
sont deux noms différents pour le même dictionnaire. La modification de l'un entraînera la modification de l'autre.
Utilisation de la fonctiondict()
In : dico = {"cle1":"valeur1","cle2":"valeur2"}
In : copie=dict(dico)
In : copie
Out : {'cle1': 'valeur1', 'cle2': 'valeur2'}
In : copie.clear()
In : copie
Out : {}
In : dico
Out : {'cle1': 'valeur1', 'cle2': 'valeur2'}
Utilisation de la fonctioncopy()
In : dico = {"cle1":"valeur1","cle2":"valeur2"}
In : copie=dico.copy()
In : copie
Out : {'cle1': 'valeur1', 'cle2': 'valeur2'}
In : copie.clear()
In : copie
Out : {}
In : dico
Out : {'cle1': 'valeur1', 'cle2': 'valeur2'}
Consignes : Coder le corps des fonctions Python à partir du fichier source suivant TP_dictionnaire.py en l'ouvrant dans Pyzo (ou Edupython ou bien Spyder).
Compléter la fonction points(mot) selon les spécifications suivantes :
points(mot)
prend en paramètre une chaîne de caractère composée de lettres majuscules;
points(mot)
renvoie un entier égal au nombre de points au scrabble de ce mot.
Compléter à partir de l'algorithme ci-après la fonction occurences(L)
spécifiée ci-dessous :
occurences(L)
prend en paramètre une listeoccurences(L)
renvoie un dictionnaire dont les clés sont les éléments de la liste et les valeurs le nombre de fois que l'élément apparaît.
Algorithme de la fonction occurences(L)
:
créer un dictionnaire vide Parcourir la liste. Pour chaque valeur de la liste, si elle est dans le dictionnaire ajouter 1 à sa valeur, sinon créer un dans le dictionnaire un nouvel élément : (valeur : 1). Renvoyer le dictionnaire
Exemple
occurrences([1,3,2,1,4,1,2,1])
peut retourner le dictionnaire {1:4,2:2,3:1,4:1}
.
Les réponses correctes d'un QCM de NSI sont stockées dans un dictionnaire nommé reponses_valides
. Les clés sont des chaînes de caractères de la forme "Q1".
Les valeurs possibles sont des chaînes de caractères correspondant aux quatre réponses "a","b","c","d".
Exemple : reponses_valides = {"Q1":"c","Q2":"a","Q3":"d","Q4":"c","Q5":"b"}
Les réponses données par Alice sont stockées dans le dictionnaire reponses_Alice
dont voici un exemple possible :
reponses_Alice = {"Q1":"b","Q2":"a","Q3":"d","Q5":"a"}
Lorsqu'Alice n'a pas répondu à une question, il n'y a pas de clef correspondant au nom de l'exercice.
La notation d'un QCM de NSI est la suivante : 3 points par réponse correcte, -1 point par réponse incorrecte et 0 si l'on n'a pas répondu
Compléter la fonction correction_QCM_Alice(reponses_Alice,reponses_valides)
qui, à partir des dictionnaires reponses_Alice
et reponses_valides
passées en paramètres renvoie le nombre de points obtenus au QCM par Alice.