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

  1. Ajouter ces entrées à fr_ang

    • hibou :owl

    • chouette :owl

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