Aller au contenu
Accueil » Les dictionnaires en Python

Les dictionnaires en Python

    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'}
    
    Python

    Les 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
    Python

    Comme 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'}
    Python

    Si 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
    Python

    Les 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
    Python

    L’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'}
    Python

    Lorsque 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
    
    Python

    Les 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 
    Python

    La 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
    Python

    La 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')
    Python

    Vous 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
    Python

    Avoir 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
    Python

    Ou 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']
    Python

    La 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'
    Python

    La 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'}
    
    Python

    La 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'}
    Python

    une 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}
    Python

    Le 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

    Si vous avez aimé l'article, vous êtes libres de le partager ! :)

    Laisser un commentaire