Première NSI
Cours sur les dictionnaires en Python

Définition

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.

Création d'un 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)}
				
				

Parcours d'un dictionnaire, accès aux clés et aux valeurs

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
					
				

Fonctions - opérations - méthodes

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'}
				
			

Première NSI
TP sur les dictionnaires en Python

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).

Exercice 1 : Points au scrabble

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.

Exercice 2

Compléter à partir de l'algorithme ci-après la fonction occurences(L) spécifiée ci-dessous :

  • La fonction occurences(L) prend en paramètre une liste
  • La fonction occurences(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}.

Exercice 3 : QCM de NSI

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.