Le dictionnaire

Un dictionnaire (dictionnary ou, en abrégé en Python, dict) est une collection qui associe une clé à une valeur. Par exemple, il est possible d’associer la clé "nom" à un nom et la clé "prenom" à un prénom.

Prudence

Pour qu’une donnée puisse être utilisée comme une clé dans un dictionnaire, il faut qu’elle puisse produire une valeur de hachage (hash en anglais). Il s’agit d’une valeur numérique qui permet d’identifier la clé sans forcément lui être unique. Par défaut en Python, les nombres, les chaînes de caractères et les valeurs booléennes peuvent produire une valeur de hachage. Ils peuvent donc être utilisés comme clé dans un dictionnaire. On peut aussi utiliser comme clé un tuple d’éléments produisant une valeur de hachage.

Créer un dictionnaire

Pour créer un dictionnaire, on associe une clé à une valeur en les séparant par :, le tout entre accolades {} :

mon_dict = {"nom": "Gayerie", "prenom": "David"}

Accéder aux éléments

Pour accéder à un élément d’une liste, il faut utiliser les crochets et préciser la valeur de la clé.

mon_dict = {"nom": "Gayerie", "prenom": "David"}
nom = mon_dict["nom"]
prenom = mon_dict["prenom"]

Attention, si un programme veut accéder à une valeur à partir d’une clé qui n’existe pas, l’erreur KeyError est produite.

>>> mon_dict = {"nom": "Gayerie", "prenom": "David"}
>>> surnom = mon_dict["surnom"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'surnom'

Il est possible de changer la valeur pour une clé donnée ou ajouter une nouvelle valeur pour une nouvelle clé :

mon_dict = {"nom": "Gayerie", "prenom": "Eric"}
mon_dict["prenom"] = "David"
mon_dict["surnom"] = "Spoonless"
print(mon_dict)
# affiche {'nom': 'Gayerie', 'prenom': 'David', 'surnom': 'Spoonless'}

Les opérations sur les dictionnaires

Connaître la taille d’un dictionnaire

Pour connaître le nombre de valeurs dans un dictionnaire, il faut utiliser la fonction len() (qui est la contraction de length) :

mon_dict = {"nom": "Gayerie", "prenom": "Eric"}
taille_dict = len(mon_dict)
print(taille_dict)
# affiche 2

Supprimer une clé d’un dictionnaire

Pour supprimer une clé dans un dictionnaire, on utilise le mot-clé del :

mon_dict = {"nom": "Gayerie", "prenom": "Eric"}
del mon_dict["prenom"]
print(mon_dict)
# affiche {'nom': 'Gayerie'}

Savoir si une clé est présente dans un dictionnaire

Pour savoir si une clé est présente dans un dictionnaire, on peut utiliser le mot-clé in :

>>> mon_dict = {"nom": "Gayerie", "prenom": "David"}
>>> "nom" in mon_dict
True
>>> "surnom" in mon_dict
False
>>> "surnom" not in mon_dict
True

Comparer deux dictionnaires

On peut tester si deux dictionnaires sont ou non identiques.

>>> dict1 = {"nom": "Gayerie", "prenom": "Eric"}
>>> dict2 = {"nom": "Gayerie", "prenom": "David"}
>>> dict1 == dict2
False
>>> dict1 != dict2
True

Quelques méthodes pour les dictionnaires

get(key[, default])

Retourne la valeur associée à la clé fournie en paramètre. Cette méthode diffère de l’utilisation des crochets [] car elle retourne la valeur du paramètre default (par défaut None) si la clé n’est pas présente dans le dictionnaire.

dict = {"nom": "Gayerie", "prenom": "David"}
print(dict.get("surnom"))
# affiche None
print(dict.get("surnom", "Pas de valeur"))
# affiche Pas de valeur
clear()

Supprime tous les éléments du dictionnaire.

items()

Retourne une vue du dictionnaire sous la forme d’une séquence itérable de tuples contenant le couple clé, valeur. Les modifications réalisées sur la vue sont répercutées sur le dictionnaire.

dict = {"nom": "Gayerie", "prenom": "David"}
vue_dict = dict.items();
print(vue_dict)
# Affiche dict_items([('nom', 'Gayerie'), ('prenom', 'David')])
keys()

Retourne une vue du dictionnaire sous la forme d’une séquence itérable contenant les clés. Les modifications réalisées sur la vue sont répercutées sur le dictionnaire.

dict = {"nom": "Gayerie", "prenom": "David"}
vue_dict = dict.keys();
print(vue_dict)
# Affiche dict_keys(['nom', 'prenom'])
values()

Retourne une vue du dictionnaire sous la forme d’une séquence itérable contenant les valeurs. Les modifications réalisées sur la vue sont répercutées sur le dictionnaire.

dict = {"nom": "Gayerie", "prenom": "David"}
vue_dict = dict.values();
print(vue_dict)
# Affiche dict_values(['Gayerie', 'David'])
copy()

Crée une copie d’un dictionnaire.

Parcourir un dictionnaire avec for

Le dictionnaire est une structure de données très courante en Python. On peut peut parcourir un dictionnaire à partir de ses clés, de ses valeurs ou encore les deux à la fois :

civilite = {'M': 'Monsieur', 'Mme': 'Madame', 'Mlle': 'Mademoiselle'}

# On parcourt les clés du dictionnaire
for k in civilite.keys():
    print(k)

# Par défaut, on parcourt les clés du dictionnaire
for k in civilite:
    print(k)

# On parcourt les valeurs du dictionnaire
for v in civilite.values():
    print(v)

# On parcourt les clés et les valeurs du dictionnaire
for k, v in civilite.items():
    print(k, v)

Exercices

Exercice : QCM en invite de commande

On définit un QCM comme une liste de questions. Une question est un dictionnaire avec les clés :

libelle

qui donne le libellé de la question.

choix

qui est un tableau des différents choix de réponse.

reponse

qui est un nombre correspondant à l’index du choix qui correspond à la bonne réponse.

Complétez le programme suivant :

qcm = [] # Le contenu du QCM à définir

def poser_question(question) :
    """Une fonction qui affiche la question,
       les choix possibles de réponse et qui demande à
       l'utilisateur son choix.

       La fonction retourne ``True`` si l'utilisateur a choisi
       la bonne réponse
    """
    pass

score = 0
# on parcourt la liste des questions et on calcule le score de l'utilisateur
# ....

# on affiche le score
print("Vous avez obtenu un score de ", score)