Wallon
licence

Numérique et Sciences Informatiques en Terminale


TP
TP

Structures de données

Les dictionnaires



1 ) introduction

Les dictionnaires constituent un autre type de données composite. Ils ressemblent aux listes dans une certaine mesure (ils sont modifiables comme elles), mais ce ne sont pas des séquences. Les éléments que nous allons y enregistrer ne seront pas disposés dans un ordre immuable.
En revanche, nous pourrons accéder à n’importe lequel d’entre eux à l’aide d’un index spécifique que l’on appellera une clé, laquelle pourra être alphabétique, numérique, ou même d’un type composite sous certaines conditions.
Comme dans une liste, les éléments mémorisés dans un dictionnaire peuvent être de n’importe quel type. Ce peuvent être des valeurs numériques, des chaînes, des listes, des tuples, des dictionnaires, et même aussi des fonctions, des classes ou des instances.

2 ) Création d’un dictionnaire

Pour faire un exemple, nous allons créer un dictionnaire de langue, pour la traduction de termes informatiques anglais en français. Puisque le type dictionnaire est un type modifiable, nous pouvons commencer par créer un dictionnaire vide, puis le remplir petit à petit. Du point de vue de la syntaxe, on reconnaît un dictionnaire au fait que ses éléments sont enfermés dans une paire d’accolades. Un dictionnaire vide sera donc noté { } :

python
python

Comme vous pouvez l’observer dans la dernière ligne ci-dessus, un dictionnaire apparaît dans la syntaxe Python sous la forme d’une série d’éléments séparés par des virgules, le tout étant enfermé entre deux accolades. Chacun de ces éléments est lui-même constitué d’une paire d’objets : un index et une valeur, séparés par un double point.
Dans un dictionnaire, les index (mis entre crochets comme tout index de liste) s’appellent des clés, et les éléments peuvent donc s’appeler des paires clé-valeur. Dans notre dictionnaire d’exemple, les clés et les valeurs sont des chaînes de caractères.
On peut aussi voir que l’ordre dans lequel les éléments apparaissent à la dernière ligne ne correspond pas à celui dans lequel nous les avons fournis. Cela n’a strictement aucune importance : nous n’essaierons jamais d’extraire une valeur d’un dictionnaire à l’aide d’un numéro d’ordre. Au lieu de cela, nous utiliserons les clés :

python

3 ) Opérations sur les dictionnaires

Vous savez déjà comment ajouter des éléments à un dictionnaire. Pour en enlever, vous utiliserez l’instruction intégrée del. Créons pour l’exemple un autre dictionnaire, destiné cette fois à contenir l’inventaire d’un stock de fruits. Les index (ou clés) seront les noms des fruits, et les valeurs seront les masses de ces fruits répertoriées dans le stock (les valeurs sont donc cette fois des données de type numérique).
Si le patron décide de liquider toutes les pommes et de ne plus en vendre, nous pouvons enlever cette entrée dans le dictionnaire :

python

La fonction intégrée len() est utilisable avec un dictionnaire : elle en renvoie le nombre d’éléments

4 ) Test d'existence

Comme pour ce qui se passe pour les chaînes, les listes et les tuples, l’instruction in est utilisable avec les dictionnaires. Elle permet de savoir si un dictionnaire comprend une clé bien déterminée:

python

5 ) Propriétés des dictionnaires

Les dictionnaires sont des objets. On peut leur appliquer un certain nombre de méthodes spécifiques :

* La méthode keys() renvoie la séquence des clés utilisées dans le dictionnaire. Cette séquence peut être utilisée telle quelle dans les expressions, ou convertie en liste ou en tuple si nécessaire, avec les fonctions intégrées correspondantes list() et tuple() :

python

* La méthode values() renvoie la séquence des valeurs mémorisées dans le dictionnaire :

python

* La méthode items(), extrait du dictionnaire une séquence équivalente de tuples. Cette méthode se révélera très utile, lorsque nous voudrons parcourir un dictionnaire à l’aide d’une boucle :

python

* La méthode copy() permet d’effectuer une vraie copie d’un dictionnaire. Il faut savoir en effet que la simple affectation d’un dictionnaire existant à une nouvelle variable crée seulement une nouvelle référence vers le même objet, et non un nouvel objet. Par exemple, l’instruction ci-dessous ne définit pas un nouveau dictionnaire (contrairement aux apparences) :

python

Si nous modifions inventaire, alors stock est également modifié, et vice-versa (ces deux noms désignent en effet le même objet dictionnaire dans la mémoire de l’ordinateur) :

python

Pour obtenir une vraie copie (indépendante) d’un dictionnaire préexistant, il faut employer la méthode copy() :

python

6 )Parcourir un dictionnaire

Pour traiter successivement tous les éléments contenus dans un dictionnaire, il est possible d'utiliser une boucle for mais attention :

• au cours de l’itération, ce sont les clés utilisées dans le dictionnaire qui seront successivement affectées à la variable de travail, et non les valeurs
• l’ordre dans lequel les éléments seront extraits est imprévisible (puisqu’un dictionnaire n’est pas une séquence).

Exemple :

python



Pour travailler sur les valeurs, on peut les récupérer une à la fois avec la clé correspondante

python



Cependant la méthode items() vue précédemment est plus performante. Appliquée au dictionnaire, cette méthode renvoie une séquence de tuples (clé,valeur) qui peut paraitre identique , mais qui permet d'examiner les tuples un par un.

python



Pour réunir 2 listes [clés] et [valeurs] préalablement constituées en un seul dictionnaire, on peut utiliser la fonction "zip" :

python



7 )Exercice

Écrivez un script qui crée un mini-système de base de données fonctionnant à l’aide d’un dictionnaire, dans lequel vous mémoriserez les noms d’une série de copains, leur âge et leur taille. Votre script devra comporter deux fonctions : la première pour le remplissage du dictionnaire, et la seconde pour sa consultation. Dans la fonction de remplissage, utilisez une boucle pour accepter les données entrées par l’utilisateur. Dans le dictionnaire, le nom de l’élève servira de clé d’accès, et les valeurs seront constituées de tuples (âge, taille), dans lesquels l’âge sera exprimé en années (donnée de type entier), et la taille en mètres (donnée de type réel). La fonction de consultation comportera elle aussi une boucle, dans laquelle l’utilisateur pourra fournir un nom quelconque pour obtenir en retour le couple « âge, taille » correspondant. Le résultat de la requête devra être une ligne de texte bien formatée, telle par exemple : « Nom : Jean Neimar - âge : 16 ans - taille : 1.75 m ».

Tiré de "apprendre à programmer python 3" de Gérard Swinnen et du site de Xavier Dupre

loi
loi








TP
TP