
Bonjour à tous, cet article est dédié à vous présenter les dictionnaires en Python. Tout d’abord nous verrons comment est structurée cette variable et comment nous pourrons l’utiliser dans un programme.
La structure des dictionnaires en Python
Les dictionnaires sont des variables que vous pourrez modifier au fur et à mesure de votre programme. Les dictionnaires n’ont pas d’index comme les listes mais utilisent des clés. Une clé peut prendre différentes formes. Cela peut être un nombre entier comme une chaîne de caractère. Pour chaque clé, vous associerez une valeur. La clé et la valeur forme alors une paire. Si vous souhaitez accéder à la valeur, vous utiliserez le dictionnaire avec la clé d’appel pour récupérer la valeur associée.
Pour faire comprendre à Python que nous sommes en train de créer un dictionnaire, il faut utiliser les accolades {}. Voici un exemple :
voiture = {'marque' : 'Peugeot', 'couleur' : 'blanche', 'gamme': '308', 'cylindrée': '150cc'}
PythonLes clés du dictionnaire sont : marque, couleur, gamme et cylindrée. Pour récupérer une valeur d’un dictionnaire, en appelant la variable avec la clé entre crochets.
print('Ma voiture est une', voiture['marque'], voiture['gamme'], 'de couleur', voiture['couleur'])
>>> Ma voiture est une Peugeot 308 de couleur blanche
PythonComme mentionné précédemment, les clés ne sont pas nécessairement des chaînes de caractères. Voici un autre exemple :
mon_dico = {1234 : 'valeur1', 1.2: 'valeur2', 'clé3': 'valeur3'}
mon_dico
>>> {1234: 'valeur1', 1.2: 'valeur2', 'clé3': 'valeur3'}
PythonSi vous appelez un dictionnaire avec une clé inexistante, Python vous renverra une erreur de type ‘Key Error’. La preuve en image :
Traceback (most recent call last):
File "C:\...\test.py", line 1, in <cell line: 1>
mon_dico[1]
KeyError: 1
PythonLes dictionnaires pas comme des listes
Les dictionnaires, contrairement aux listes, ne sont pas ordonnés. Si vous voulez plus de détails sur les listes, j’ai écrit un article sur le sujet ici. Le premier élément d’une liste sera accessible via l’instruction ma_liste[0]. Cependant, il n’y a pas de notion d’ordre pour les dictionnaires. Si vous créez deux dictionnaires avec les mêmes paires clé / valeur mais dans un ordre différent, les deux dictionnaires seront équivalents alors que ça ne sera pas le cas pour une liste.
ma_liste1 = ['a', 'b', 'c']
ma_liste2 = ['a', 'c', 'b']
print(ma_liste1 == ma_liste2)
>>> False
mon_dico1 = {'a': 1, 'b': 2, 'c': 3}
mon_dico2 = {'a': 1, 'c': 3, 'b': 2}
print(mon_dico1 == mon_dico2)
>>> True
PythonL’utilisation des dictionnaires n’est donc pas faite pour des données ordonnées. Les dictionnaires sont utilisées pour stocker des informations en fonction d’une liste de clés. Cette liste de clés vous permet de ne pas rechercher un indice dans une liste ordonnée. Par exemple, vous avez une liste d’élèves pour lesquels vous voulez stocker leur note au dernier examen. Vous remplirez le dictionnaire avec la clé qui est le prénom et la valeur qui est la note. Plus tard dans votre programme, quand vous voudrez récupérer la note, vous n’aurez pas besoin de savoir à quel rang se trouve votre élève, le prénom suffit. Vous ferez néanmoins attention si vous avez plusieurs élèves avec le même prénom :).
Création d’un dictionnaire Python et modification
La forme la plus simple pour créer un dictionnaire est d’assigner un dictionnaire vide à une variable. Vous pouvez sinon commencer à initialiser votre dictionnaire avec la première paire clé / valeur. Pour rajouter des éléments à votre dictionnaire, il suffit de réitérer l’opération. Pour supprimer un élément, vous pouvez utiliser l’instruction « del ». Voici un exemple qui illustre les concepts mentionnés :
mon_dico = {} # Initialisation d'un dictionnaire vide
mon_dico
>>> {}
mon_dico['clé1'] = 'Valeur1' # Rajout d'une paire clé / valeur
mon_dico
>>> {'clé1': 'Valeur1'}
mon_dico['clé2'] = 'Valeur2' # Rajout d'une deuxième paire clé / valeur
mon_dico
>>> {'clé1': 'Valeur1', 'clé2': 'Valeur2'}
del mon_dico['clé1']
mon_dico
>>> {'clé2': 'Valeur2'}
PythonLorsque que vous travaillez avec des dictionnaires, vous pouvez être amené à vouloir interroger le dictionnaire pour savoir si la clé existe dans le dictionnaire, voici comment faire :
voiture = {'marque' : 'Peugeot', 'couleur' : 'blanche', 'gamme': '308', 'cylindrée': '150cc'}
key = 'marque'
key in voiture
>>> True
key = 'longueur'
key in voiture
>>> False
PythonLes méthodes utiles avec les dictionnaires Python
Les méthodes sont des fonctions qui sont liées à une classe, ici les dictionnaires. Voici une liste de méthodes qui vous seront utiles pour travailler avec les dictionnaires.
La méthode keys()
Cette méthode permet de récupérer toutes les clés d’un dictionnaire. Cette méthode renvoie une liste un peu particulière. Le type de variable retourné est de type dict_keys. Elle ressemble à une liste mais elle n’est pas modifiable. Vous pouvez par contre parfaitement réaliser une boucle sur celle-ci.
voiture = {'marque' : 'Peugeot', 'couleur' : 'blanche', 'gamme': '308', 'cylindrée': '150cc'}
voiture.keys()
>>> dict_keys(['marque', 'couleur', 'gamme', 'cylindrée'])
for key in voiture.keys():
print(key, end=' ')
>>> marque couleur gamme cylindrée
PythonLa méthode values()
Cette méthode permet de récupérer toutes les valeurs d’un dictionnaire. Cette méthode renvoie une liste un peu particulière. Le type de variable retourné est de type dict_values. Elle ressemble à une liste mais elle n’est pas modifiable. Tout comme la méthode précédente, vous pouvez réaliser une boucle sur celle-ci.
voiture = {'marque' : 'Peugeot', 'couleur' : 'blanche', 'gamme': '308', 'cylindrée': '150cc'}
voiture.values()
>>> dict_values(['Peugeot', 'blanche', '308', '150cc'])
for value in voiture.values():
print(value, end=' ')
>>> Peugeot blanche 308 150cc
PythonLa méthode items()
La méthode items() combine les deux précédentes. Elle renvoie une liste de type dict_items contenant les paires clé / valeur du dictionnaires. Ces paires clé / valeur sont des tuples donc non modifiable.
voiture = {'marque' : 'Peugeot', 'couleur' : 'blanche', 'gamme': '308', 'cylindrée': '150cc'}
voiture.items()
>>> dict_items([('marque', 'Peugeot'), ('couleur', 'blanche'), ('gamme', '308'), ('cylindrée', '150cc')])
for item in voiture.items():
print(item)
>>> ('marque', 'Peugeot')
>>> ('couleur', 'blanche')
>>> ('gamme', '308')
>>> ('cylindrée', '150cc')
item[0], item[1]
>>> ('cylindrée', '150cc')
PythonVous devez utiliser le tuple comme une liste avec les indices 0 et 1 pour accéder aux informations. Pour éviter de devoir utiliser ces indices, il existe une astuce en Python qui permet d’assigner les éléments du tuple dans des variables séparées. Voici comment faire :
voiture = {'marque' : 'Peugeot', 'couleur' : 'blanche', 'gamme': '308', 'cylindrée': '150cc'}
for key, value in voiture.items():
print('La', key, 'est', value)
>>> La marque est Peugeot
>>> La couleur est blanche
>>> La gamme est 308
>>> La cylindrée est 150cc
PythonAvoir une liste des clés ou valeurs au sens strict du terme
Si vous avez tout de même besoin de travailler avec une liste (au sens de la variable) et donc de la modifier, vous pouvez utiliser la fonction « list » qui transformera la variable dict_keys ou dict_values en une liste modifiable.
voiture = {'marque' : 'Peugeot', 'couleur' : 'blanche', 'gamme': '308', 'cylindrée': '150cc'}
keys = voiture.keys()
keys # ici variable dict_keys
>>> dict_keys(['marque', 'couleur', 'gamme', 'cylindrée'])
liste_keys = list(keys)
liste_keys # ici c'est maintenant une variable liste.
>>> ['marque', 'couleur', 'gamme', 'cylindrée']
type(liste_keys)
>>> list
PythonOu alors vous pouvez utiliser directement la fonction « list » sur le dictionnaire pour récupérer la liste des clés.
list(voiture)
>>> ['marque', 'couleur', 'gamme', 'cylindrée']
PythonLa méthode get()
La méthode get() permet d’interroger un dictionnaire en lui passant une clé. Si celle-ci existe, la méthode renverra la valeur associée. Cependant, si la clé n’existe pas, la méthode get() utilise un argumet qui est la valeur à renvoyer si la clé n’est pas trouvé. Si vous êtes dans un cas où vous devez interroger un dictionnaire mais qu’il est possible que la clé n’existe, cette méthode peut vous aider.
voiture = {'marque' : 'Peugeot', 'couleur' : 'blanche', 'gamme': '308', 'cylindrée': '150cc'}
voiture.get('marque','clé inexistante')
>>> 'Peugeot'
voiture.get('longueur','clé inexistante')
>>> 'clé inexistante'
PythonLa méthode pop() et popitem()
Tout comme les listes, la méthode pop(key) permet de supprimer un élément du dictionnaire et de récupérer la valeur associée. La méthode popitem() renvoie la paire clé / valeur sous forme de tuple. L’ordre suivi pour retirer les éléments respecte le ‘LIFO’ : Last In First Out. Le dernier élément ajouté au dictionnaire est le premier à sortir.
voiture = {'marque' : 'Peugeot', 'couleur' : 'blanche', 'gamme': '308', 'cylindrée': '150cc'}
valeur = voiture.pop('couleur')
valeur
>>> 'blanche'
voiture
>>> {'marque': 'Peugeot', 'gamme': '308', 'cylindrée': '150cc'}
PythonLa méthode setdefault()
Cette méthode permet de définir une valeur par défaut pour une clé donnée. Voyons son fonctionnement par deux exemples tirés de la littérature.
voiture = {'marque': 'Peugeot', 'gamme': '308', 'cylindrée': '150cc'} # création du dictionnaire sans la couleur
voiture.setdefault('couleur', 'blanche')
>>> 'blanche'
voiture
>>> {'marque': 'Peugeot', 'gamme': '308', 'cylindrée': '150cc', 'couleur': 'blanche'}
voiture['couleur'] = 'noire'
voiture
>>> {'marque': 'Peugeot', 'gamme': '308', 'cylindrée': '150cc', 'couleur': 'noire'}
Pythonune fois la valeur par défaut attribuée, il est toujours possible de venir directement modifier la valeur en appelant la clé. Cependant, la valeur par défaut ne pourra plus être changée après coup. Voici une application qui utilise les valeurs par défaut dans les dictionnaires.
message ='Je vous souhaite a tous une excellente lecturE.'
comptage_lettre = {}
for lettre in message: # on boucle sur toutes les caractères de la chaîne
comptage_lettre.setdefault(lettre, 0) # si la lettre n'existe pas, on initialise à 0
comptage_lettre[lettre] = comptage_lettre[lettre] + 1 # on incrémente pour le comptage
comptage_lettre
>>> {'J': 1, 'e': 8, ' ': 7, 'v': 1, 'o': 3, 'u': 5, 's': 3, 'h': 1, 'a': 2, 'i': 1, 't': 4, 'n': 2, 'x': 1, 'c': 2, 'l': 3, 'r': 1, 'E': 1, '.': 1}
PythonLe script boucle sur tous les caractères de la chaîne « message ». La méthode « setdefault » permet d’être sûr que la clé existe dans le dictionnaire quand le script vient incrémenter le comptage. Dans le résultat de sortie, on voit que les lettres en minuscules et majuscules sont considérées comme différentes.
Pour finir
Nous avons vu dans cet article comment créer et modifier un dictionnaire en Python. Différents cas d’application sont présentés, notamment sur l’utilisation des boucles avec les dictionnaires. Si vous voulez aller plus loin, vous pourrez trouver plus d’information dans la documentation officielle de Python ici.
N’hésitez pas à laisser des commentaires,
A bientôt,
Benjamin