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é { } :
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 :
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 :
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:
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() :
* La méthode values() renvoie la séquence des valeurs mémorisées dans le dictionnaire :
* 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 :
* 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) :
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) :
Pour obtenir une vraie copie (indépendante) d’un dictionnaire préexistant, il faut employer la
méthode copy() :
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 :
Pour travailler sur les valeurs, on peut les récupérer une à la fois avec la clé correspondante
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.
Pour réunir 2 listes [clés] et [valeurs] préalablement constituées en un seul dictionnaire, on peut utiliser la fonction "zip" :
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