TP2-PROG-06 : Dictionnaires
Contents
TP2-PROG-06 : Dictionnaires#
En Python, un dictionnaire est une structure de données qui, comme une liste, contient plusieurs éléments, mais plus puissant. Dans une liste les indices sont des entiers. Dans un dictionnaire les indices peuvent être de n’importe quel type immuable (entier, nombre, texte, tuple, …).
La fonction dict
crée un dictionnaire vide. On pourrait aussi le créer avec une paire d’accolades {}
.
d = dict()
d
{}
Exercice
Créez un dictionnaire français_anglais vide nommé fr_ang
Mémoire associative#
Un dictionnaire associe une série de clés à une autre série de valeurs. Cette structure est aussi appelée
mémoire associative
table de hachage
Ce type de structures de données est standard dans les langages récentes (JavaScript, Python, Ruby) mais absent les langages plus anciens (C, Fortran).
Pour ajouter un élément à un dictionnaire stocké dans une variable d
, nous utilisons une expression de la forme d[clé] = valeur
. Comme pour un ‘vrai’ dictionnaire qui associe des mots de deux langues, nous pouvons définir ceci.
d['un'] = 'one'
d['deux'] = 'two'
d
{'un': 'one', 'deux': 'two'}
Un dictionnaire est représenté par ceci:
il est délimité par des accolades (
{}
)ses éléments sont séparés par des virgules (
,
)chaque élément est une paire clé:valeur, où la clé vient en premier, séparée de la valeur associée par un deux-points (
:
)
Pour récupérer la valeur associée à une clé, nous utilisons la clé entre crochets ([]
) — de façon similaire à ce que nous avions fait avec les index des éléments d’une liste.
d['deux']
'two'
De nouveaux éléments peuvent être ajoutés dans n’importe quel ordre.
d['dix'] = 'ten'
d
{'un': 'one', 'deux': 'two', 'dix': 'ten'}
Avec la fonction len
, nous trouvons la taille du dictionnaire, c’est-à-dire le nombre de paires clé-valeur qu’il contient.
len(d)
3
Avec l’opérateur spécial in
, on peut tester si une clé donnée fait partie du dictionnaire.
'deux' in d
True
Attention, le test est fait avec les clés, et non pas avec les valeurs.
'two' in d
False
Exercice
Ajoutez les élèments de la première liste de cette page à votre dictionnaitre
fr_ang
Affichez le nombre de paires de mots
Vérifiez si cochon fait partie du dictionnaire
Compter (histogramme)#
Un dictionnaire est une structure idéale pour compter les éléments appartenant à différentes catégories. Par exemple si nous voulons compter l’apparence de chaque lettre dans un texte nous pouvons utiliser un dictionnaire.
phrase = 'dictionnaire'
d = {}
for c in phrase:
if c in d:
d[c] += 1
else:
d[c] = 1
d
{'d': 1, 'i': 3, 'c': 1, 't': 1, 'o': 1, 'n': 2, 'a': 1, 'r': 1, 'e': 1}
On appelle cette structure aussi un histogramme. Il nous montre que
la lettre d apparait une fois,
la lettre i apparait trois fois.
La fonction get
permet d’obtenir une valeur par défaut, si la clé n’existe pas encore dans le dictionnaire. Par exemple la lettre b n’est pas une clé du dictionnaire. La fonction retourne alors sa valeur par défaut qui est 0.
d.get('b', 0)
0
d = {}
for c in phrase:
d[c] = d.get(c, 0) + 1
d
{'d': 1, 'i': 3, 'c': 1, 't': 1, 'o': 1, 'n': 2, 'a': 1, 'r': 1, 'e': 1}
Ceci nous permet de raccourcir le programme de l’histogramme encore plus.
Exercice Ecrivez un programme qui donne l’histogramme du mot “anticonstitutionnellement”
Itération sur les clés#
Nous pouvons itérer sur les clés d’un dictionnaire.
for c in d:
print(c, d[c])
d 1
i 3
c 1
t 1
o 1
n 2
a 1
r 1
e 1
Transformer un dictionnaire en liste nous retourne une liste de ses clés.
list(d)
['d', 'i', 'c', 't', 'o', 'n', 'a', 'r', 'e']
La fonction sorted
nous retourne une liste de ses clés, triée.
sorted(d)
['a', 'c', 'd', 'e', 'i', 'n', 'o', 'r', 't']
Exercice
Ordonnez le contenu du dictionnaire fr_ang
avec la fonction sorted
List et ensemble des valeurs#
La méthode values
retourne toutes les valeurs.
d.values()
dict_values([1, 3, 1, 1, 1, 2, 1, 1, 1])
Nous pouvons les transformer en liste ordinaire.
list(d.values())
[1, 3, 1, 1, 1, 2, 1, 1, 1]
Nous pouvons également la transformer en ensemble et éliminer les doublons.
set(d.values())
{1, 2, 3}
Exercice
Affichez tous les mots anglais de traducteur
Inverser un dictionnaire#
Toutes les clés d’un dictionnaire sont uniques. Par contre, il est tout à fait possible d’avoir plusieurs valeurs qui sont identiques. Si nous inversons un dictionnaire, une valeur peut correspondre à plusieurs clés, ce que nous pouvons alors stocker dans une liste.
inverse = {}
for c in d:
val = d[c]
if val in inverse:
inverse[val].append(c)
else:
inverse[val] = [c]
inverse
{1: ['d', 'c', 't', 'o', 'a', 'r', 'e'], 3: ['i'], 2: ['n']}
d
{'d': 1, 'i': 3, 'c': 1, 't': 1, 'o': 1, 'n': 2, 'a': 1, 'r': 1, 'e': 1}
Exercice
Ajouter ces entrées à
fr_ang
hibou :owl
chouette :owl
Inversez le dictionnaire
fr_ang
Exercice
Ecrivez un programme Quiz qui permet de vérifier si votre tradcution est juste ou fausse pour tous les mots du dictionnaire fr_ang