Prenons l'exemple d'un répertoire téléhonique. Nous pouvons la modéliser simplement comme tableau (ou liste) de tuples (nom,numéro).
liste_tel = [("Paul", 5234),
("Emile", 5345),
("Victor", 5186),
("Rose", 5678),
("Hélène", 5432)
]
Si nous voulons appeler Rose, nous avons deux possibilités avec une telle liste:
Comme l'accès, la modification ou l'ajout d'une information devraient être possible sans devoir feuilleter tout le répertoire, il semble plus pratique d'associer à un nom un numéro, autrement dit d'associer à une clé une information.
C'est ce que nous allons faire avec un dictionnaire.
Un dictionnaire est un ensemble non ordonné de paires (clé, valeur) avec un accès très rapide à la valeur à partir de la clé.
Une clé peut être de type alphabétique, numérique, ou même de type construit sous certaines conditions. Les valeurs pourront être de tout type sans exclusion.
Le dictionnaire est un objet mutable, autrement dit, on peut le modifier.
Plusieurs méthodes permettent de créer un dictionnaire.
Méthode 1 : création d'un dictionnaire vide puis ajout de paires clé-valeur dans le dictionnaire.
Création d'un dictionnaire vide :
d1 = {} # Création d'un dictionnaire vide.
# Autre notation : d1 = dict()
type(d1) # <type 'dict'>
Ajout de paires clé-valeur dans le dictionnaire :
d1["Paul"]=5234
d1["Emile"]=5345
d1["Victor"]=5186
print(d1)
Méthode 2 : création d'un dictionnaire noté en extension.
d2 = {'Paul': 5234, 'Emile': 5345, "Victor" : 5186}
print(d2)
Méthode 3 : création d'un dictionnaire créé à partir d'un tableau de couples.
tab = [("Paul",5234),("Emile",5345),("Victor",5186)]
print(tab)
dic = dict(tab)
print(dic)
Méthode 4 : création d'un dictionnaire en compréhension.
carre = {k: k ** 2 for k in range(1, 11)}
print("carrés parfaits de 1 à 100 =>", carre)
numero = d1["Victor"]
print("Le numéro de téléphone de Victor est le :", numero)
Si la clé n'existe pas dans le dictionnaire, une exception de type KeyError sera levée.
d1["Rose"]
Variante : La methode get()
permet de récupérer une valeur dans un dictionnaire et si la clé est introuvable, vous pouvez donner une valeur à retourner par défaut :
d1.get("Paul")
d1.get("Rose") # la clé "Rose" n'existe pas donc aucune valeur n'est retournée
d1.get("Paul","Cette personne ne figure pas dans votre répertoire.")
d1.get("Rose","Cette personne ne figure pas dans votre répertoire.")
Un dictionnaire est un objet mutable. On peut modifier la valeur associée à une clé :
d1["Emile"] = 5151
d1
La fonction del()
permet de supprimer une paire clé-valeur :
del d1["Emile"]
d1
La méthode clear()
permet d'effacer un dictionnaire.
d2.clear()
d2
Un dictionnaire est une collection. La fonction len()
renvoie le nombre d'éléments :
len(d3)
Vous disposez d'un tableau de contacts prénom-numéro_de_téléphone nommée liste_tel
.
Activez ce tableau :
liste_tel = [("Paul", 5234),
("Emile", 5345),
("Victor", 5186),
("Rose", 5678),
("Hélène", 5432)
]
liste_tel
et affichez ce dictionnaire :
Lorsque l'on parcoure un dictionnaire avec une boucle for
on parcoure en réalité les clés du dictionnaire.
rep_tel = {"Paul" : 5234,
"Emile" : 5345,
"Victor" : 5186,
"Rose" : 5678,
"Hélène" : 5432,
"Gaëlle" : 4526}
for x in rep_tel:
print(x)
On peut alors afficher tout le contenu de notre dictionnaire avec une boucle.
for x in rep_tel:
print("la clé", x, "est associée à la valeur", rep_tel[x])
Pour ne pas avoir à se souvenir que ce sont les clés qui sont parcourues, il existe trois méthodes permettant de parcourir un dictionnaire en précisant de manière explicite quels sont les éléments parcourus.
keys()
permet de parcourir l'ensemble des clés;values()
permet de parcourir l'ensemble des valeurs;items()
permet de parcourir l'ensemble des paires (clé, valeur);Voici comment itérer itérer sur un dictionnaire grâce à ces méthodes.
keys()
¶On peut utiliser la méthode keys()
pour récupérer les clés d'un dictionnaire. Cette méthode renvoie la séquence des clés utilisées dans le dictionnaire.
rep_tel.keys()
Si on veut récupérer un tableau contenant les clés du dictionnaire on utilise la fonction list()
.
list(rep_tel.keys())
Exemple : On parcourt donc ainsi les clés du dictionnaire :
rep_tel = {"Paul" : 5234, "Emile" : 5345, "Victor" : 5186, "Rose" : 5678, "Hélène" : 5432, "Gaëlle" : 4526}
for cle in rep_tel.keys(): # ou for e in list(rep_tel.keys()):
print(cle)
values()
¶On peut utiliser la méthode values()
pour récupérer les valeurs d'un dictionnaire. Cette méthode renvoie la séquence des valeurs utlisées dans le dictionnaire.
rep_tel.values()
Si on veut récupérer un tableau contenant les valeurs du dictionnaire on utilise la fonction list()
.
list(rep_tel.values())
Exemple : On parcourt donc ainsi les valeurs du dictionnaire :
rep_tel = {"Paul" : 5234, "Emile" : 5345, "Victor" : 5186, "Rose" : 5678, "Hélène" : 5432, "Gaëlle" : 4526}
for valeur in rep_tel.values(): # ou for e in list(rep_tel.values()):
print(valeur)
items()
¶La méthode items()
extrait du dictionnaire la séquence des paires (clé, valeur).
rep_tel.items()
Si on veut récupérer un tableau contenant les paires (clé, valeur) du dictionnaire on utilise la fonction list()
.
list(rep_tel.items())
Exemple : On parcourt donc ainsi les couples (clé, valeur) du dictionnaire :
rep_tel = {"Paul" : 5234, "Emile" : 5345, "Victor" : 5186, "Rose" : 5678, "Hélène" : 5432, "Gaëlle" : 4526}
for cle, valeur in rep_tel.items():
print("Le numéro de", cle, "est :", num)
On peut aussi interroger l'appartenance d'une valeur ou d'une clé grace à l'expression in
.
"Rose" in rep_tel.keys()
5180 not in rep_tel.values()
Variantes : has_key(),...
L'objectif de cette activité est de programmer deux des fonctionnalités importantes des smartphones actuels :
On suppose pour simplifier que le repertoire téléphonique est mémorisé dans le smartphone sous la forme d'un dictionnaire et que chaque élément du dictionnaire est une paire (prénom, numéro) où prénom est la clé et numéro la valeur associée.
On considère que le répertoire téléphonique est mémorisé dans le dictionnaire repertoire
. Quelques contacts sont déjà enregistrés dans ce répertoire.
repertoire = {'David': 1010, 'Mélanie': 1111, 'Alain': 121212}
ajout_contact(repertoire)
qui demande à l'utilisateur de saisir les données (prénom et numéro de téléphone) d'un contact et qui ajoute ce contact à repertoire
.def ajout_contact(repertoire):
# A COMPLETER
# TEST
repertoire = {'David': 1010, 'Mélanie': 1111, 'Alain': 121212}
ajout_contact(repertoire) # on appelle la fonction ajout_contact
repertoire # on affiche le répertoire pour vérifier l'ajout du contact
ajout_contact
dans la fonction suivante qui a pour objectif d'ajouter des contacts au répertoire autant de fois que l'on souhaite. Plus précisément, une fois qu'un contact a été saisi on demande à l'utilisateur s'il souhaite ajouter un autre contact. Compléter la fonction remplissage
en conséquence.def remplissage(repertoire):
encore = True
while encore == True:
# --------------
# à compléter
# --------------
# TEST
#repertoire = {'David': 1010, 'Mélanie': 1111, 'Alain': 121212}
remplissage(repertoire) # on appelle la fonction remplissage pour compléter le répertoire
repertoire # on affiche ensuite le dictionnaire (une fois tous les contacts saisis)
On souhaite maintenant écrire une fonction numero_de(prenom, repertoire)
qui renvoie le numéro de prenom
si prenom
est bien dans repertoire
et qui renvoie un message sinon.
prenom
est présent dans repertoire
, quelle instruction permet d'afficher le numéro associé à prenom
?prenom = str(input("Entrer un prénom : "))
# à compléter
numero_de(prenom, repertoire)
qui renvoie le numéro de téléphone associé dans l'affirmative et un message d'erreur sinon.def numero_de(prenom, repertoire):
'''prenom est une chaine de caractères et repertoire est un dictionnaire'''
# à compléter
# TEST
prenom = str(input("Entrer le prénom du contact cherché : "))
numero_de(prenom, repertoire)
Références
Germain BECKER & Sébastien POINT, Lycée Mounier, ANGERS