Python : les dictionnaires

Numérique et sciences informatiques

python

Les dictionnaires

Un dictionnaire en python est une sorte de liste mais au lieu d'utiliser des index , on utilise des clés alphanumériques.

Les dictionnaires sont des collections non ordonnées d'objets, c'est-à-dire qu'il n'y a pas de notion d'ordre (i.e. pas d'indice). On accède aux valeurs d'un dictionnaire par des clés.

blob:https://www.lumni.fr/74c99ec4-7651-4c01-b605-e7e352aed9a7

Pour initialiser un dictionnaire , on utile la syntaxe suivante:

mon_garage = {}

ou

>>> mon_garage = dict()

Comment ajouter des valeurs dans un dictionnaire python?

Pour ajouter des valeurs à un dictionnaire il faut indiquer une clé ainsi qu'une valeur:

>>> mon_garage = {}
>>> mon_garage["Ferrari"] = 1
>>> mon_garage["Porche"] = 2
>>> mon_garage["Bentley"] = 1
>>> mon_garage
{'Ferrari': 1, 'Porche': 2, 'Bentley' : 1}

Vous pouvez utiliser des clés numériques comme dans la logique des listes .

Comment récupérer une valeur dans un dictionnaire python?

La méthode get vous permet de récupérer une valeur dans un dictionnaire et si la clé est introuvable, vous pouvez donner une valeur à retourner par défaut:

>>> mon_garage = {"Ferrari": 1, "Porche": 2, "Bentley": 1}
print(mon_garage.get("Ferrari"))
print(mon_garage.get("Citroën", "Voiture inconnue"))
>>> 1
>>> Voiture inconnue

Comment supprimer une entrée dans un dictionnaire python?

Il est possible de supprimer une entrée en indiquant sa clé, comme pour les listes:

	>>> del mon_garage["Bentley"]  # voiture cassée
>>> mon_garage
{"Ferrari": 1, "Porche": 2}
ou avec la méthode pop
>>> mon_garage.pop("Bentley")
>>> mon_garage
{"Ferrari": 1, "Porche": 2}

Comment récupérer les clés d'un dictionnaire python par une boucle ?

Les dictionnaires en Python utilisent une table de hashage pour stocker les clés.

Pour récupérer les clés on utilise la méthode keys .

>>> mon_garage = {"Ferrari":1, "Porche":2}
>>> for cle in mon_garage.keys():
...     print (cle)
... 
Ferrari
Porche

Comment récupérer les valeurs d'un dictionnaire python par une boucle ?

Pour cela on utilise la méthode values .

>>> mon_garage = {"Ferrari":1, "Porche":2}
>>> for valeur in mon_garage.values():
...     print (valeur)
... 
1
2

Comment récupérer les clés et les valeurs d'un dictionnaire python par une boucle ?

Pour récupérer les clés et les valeurs en même temps, on utilise la méthode items qui retourne un tuple .

>>> mon_garage = {"Ferrari":1,"Porche":2}
>>> for cle,valeur in mon_garage.items():
...     print (cle, valeur)
... 
Ferrari 1
Porche 2

Comment utiliser des tuples comme clé dans un dictionnaire python?

Une des forces de python est la combinaison tuple/dictionnaire qui fait des merveilles dans certains cas comme lors de l'utilisation de coordonnées.

>>> b = {}
>>> b[(3,2)]=12
>>> b[(4,5)]=13
>>> b
{(4, 5): 13, (3, 2): 12}

Comment créer une copie indépendante d'un dictionnaire python?

Comme pour toute variable, vous ne pouvez pas copier un dictionnaire en faisant dic1 = dic2 :

>>> d = {"k1":2, "k2":1}
>>> e = d
>>> d["k1"] = "XXX"
>>> >>>e
>>>{"k2": 1, "k1": "XXX"}

Pour créer une copie indépendante vous pouvez utiliser la méthode copy :

>>> d = {"k1":2, "k2":1}
>>> e = d.copy()
>>> d["k1"] = "XXX"
>>> >>>e
>>>{k2": 1, "k1": 2}

Comment fusionner des dictionnaires python?

La méthode update permet de fusionner deux dictionnaires .

>>> mon_garage1 = {'Ferrari': '1'}
>>> mon_garage2 = {'Porche': '2'}
>>> mon_garage1.update(mon_garage2)
>>> print(mon_garage1)
{'Ferrari': '1', 'Porche': '2'}



Résumé de cours sur les dictionnaires

Méthode Description
mon_dico["ville"]="Paris" Ajoute une valeur "Paris" dans mon_dico à la clé "ville".
del mon_dico["rue"] Supprime une entrée dans mon_dico avec la clé "rue".
mon_dico.keys() Renvoie la liste des clés de mon_dico.
mon_dico.values() Renvoie la liste des valeurs de mon_dico.
mon_dico_A.update(mon_dico_B) fusionne mon_dico_A et mon_dico_B.

Entraînement 1:

Soit le dictionnaire :

>>> dico = {"ville": "le moule", "departement": "Guadeloupe", "habitants": 30000}
  1. Implémenter du code pour corriger l'erreur dans habitants, la bonne valeur est 20000.
  2. Implémenter du code pour afficher la liste des clés du dictionnaire.
  3. Implémenter du code pour afficher la liste des valeurs du dictionnaire.
  4. Implémenter du code pour afficher la liste des paires clé/valeur du dictionnaire.
  5. Écrire la phrase "le moule a 20000 habitants" à l'aide du dictionnaire d.

Entraînement 2 :

L’occurrence d’un caractère dans une phrase est son apparition dans la phrase.

On souhaite stocker les nombres d'occurrences dans un dictionnaire dont les clés sont les caractères de la phrase et les valeurs le nombre d'occurrences du caractère. Écrire une fonction occurrence_lettres prenant comme paramètre une chaîne de caractères phrase. Cette fonction doit renvoyer un dictionnaire des nombres d'occurrences des caractères présents dans phrase.

Exemple :

>>> nb_occurrences("Bonjour !"")
{"B": 1, "o": 2, "n": 1, "j": 1, "u": 1, "r": 1, " ": 1, "!": 1}
>>> nb_occurrences("ha ! ha ! ha !")
{"h": 3, "a": 3, " ": 5, "!": 3}

Voir une solution

Entraînement 3 :

On donne un extrait des logins d’accès au réseau du lycée :

toto  to12
tata    ta12
titi    1234

1) Créer une variable de type dict qui contient les couples identifiant - mot de passe ci-dessus.

2)Écrire une fonction verification qui prend en paramètres identifiant et mot_de_passe et qui renvoie True si identifiant et mot de passe correspondent et False le cas contraire.

Entraînement 4 :

Voici un exemple de données permettant de manipuler un livre de recettes de cuisine`a partir de la liste des ingrédients des recettes :

Recette Ingrédients
Gâteau au chocolat chocolat, oeuf, farine, sucre, beurre
Gâteau au yaourt aourt, oeuf, farine, sucre
Crêpes oeuf, farine, lait, bière
Quatre-quarts oeuf, farine, beurre, sucre
Kouign-amann farine, beurre, sucre

On va modéliser en Python un livre de recettes, par un dictionnaire de type dict(str : list(str))dans lequel :

  • les noms des recettes, de type str, comme clés,
  • l’ensemble des ingrédients, de type list(str), comme valeurs associées

  1. Construire un dictionnaire mes_recettes correspondant au tableau ci-dessus.
  2. Définir une fonction nb_ingredients(D, nom) qui à partir d’un dictionnaire de recettes D, défini comme décrit ci-dessus,renvoie le nombre d’ingrédients de la recette nommé nom.
  3. Définir une fonction recherche_recettes(D,i) renvoyant l’ensemble des recettes du dictionnaire D qui utilisent l’ingrédient i.
  4. Définir une fonction recherche_recettes_2(D,i1,i2)renvoyant l’ensemble des recettes du dictionnaire D qui utilisent les ingrédients i1 et i2.
  5. Définir une fonction recherche_recettes_multi(D,Li) renvoyant l’ensemble des recettes du dictionnaire D qui utilisent tous les ingrédients de la liste Li.
  6. Définir une fonction recherche_recettes_sans_multi(D,Li) renvoyant l’ensemble des recettes du dictionnaire D qui n’utilisent aucun des ingrédients de la liste Li.

Savoir faire

  • Construire une entrée de dictionnaire.
  • Itérer les éléments d'un dictionnaire.
Fiche de cours