Les dictionnaires

(actualisé le )

Généralités

Les dictionnaires (appelés aussi tableaux associatifs ou tables de hachage) permettent d’associer des valeurs à des clés. A partir d’une clé, on peut alors accéder directement à la valeur qui lui est associée. On créé un dictionnaire en indiquant les couples clé / valeur entre accolade et séparés par des virgules :

  1. mon_dictionnaire = {clé_1 : valeur_1, clé_2 : valeur_2, clé_3 : valeur_3, ...}

Propriétés :

  • Les dictionnaires sont des conteneurs à l’instar des listes et des tuples.
  • Les dictionnaires sont mutables c’est-à-dire que l’on peut modifier leur contenu.
  • Les dictionnaires ne sont pas en revanche des séquences comme les tuples et les listes : on ne peut pas accéder à leur contenu en donnant un indice.
  • Dans un dictionnaire, les clés doivent être récursivement non mutable et chaque clé doit être unique.
  • Les valeurs associées aux clés peuvent revêtir un type quelconque.

Exemples de clés récursivement non mutables : une chaîne de caractères, un nombre, un tuple de nombres, un tuple de tuples de nombres. En revanche, une liste ou un tuple contenant une liste ne sont pas des clés valides pour un dictionnaire.

Créer un dictionnaire et accéder à ses éléments

Les dictionnaires sont très utiles pour stocker par exemple des enregistrements , c’est-à-dire des données contenant plusieurs champs nommés, les clés étant souvent dans ce cas des chaînes de caractères.

Exemples :

  1. # Initialisation d'un dictionnaire vide
  2. mon_dictionnaire = {}
  3. # Initialisation d'un dictionnaire non vide
  4. personnage = {"Nom" : "Yoda", "Age" : 900}
  5. # Affichage de la valeur associée à chaque clé
  6. print(personnage["Nom"])
  7. '''
  8. 'Yoda'
  9. '''
  10. print(personnage["Age"])
  11. '''
  12. 900
  13. '''
  14. print(personnage["Taille"])
  15. '''
  16. KeyError "Taille"
  17. '''

Télécharger

Modifier un dictionnaire et parcourir tous ses éléments

On ajoute un couple clé / valeur de la manière suivante :

  1. personnage["Taille"] = 0.66
  2. print(personnage)
  3. '''
  4. {"Nom" : "Yoda", "Age" : 900, "Taille" : 0.66}
  5. '''

Télécharger

On modifie de la même façon la valeur associée à une clé déjà présente :

  1. personnage["Age"] = 901
  2. print(personnage)
  3. '''
  4. {"Nom" : "Yoda", "Age" : 901, "Taille" : 0.66}
  5. '''

Télécharger

De la même manière que les listes et les tuples, les dictionnaires sont itérables. On itère sur les clés, les valeurs ou les couples clés / valeurs.

  • Itération sur les clés :
  1. for cle in personnage.keys() :
  2.     print(cle)
  3. '''
  4. Nom
  5. Age
  6. Taille
  7. '''
  8.    

Télécharger

  • Itération sur les valeurs :
  1. for valeur in personnage.values() :
  2.     print(valeur)
  3. '''
  4. Yoda
  5. 901
  6. 0.66
  7. '''
  8.    

Télécharger

  • Itération sur les couples clé / valeur :
  1. for (cle, valeur) in personnage.items() :
  2.     print (cle, " : ", valeur)
  3. '''
  4. Nom  :  Yoda
  5. Age  :  901
  6. Taille  :  0.66
  7. '''

Télécharger

Remarque : dans ce dernier cas de figure, l’itération porte sur le tuple (cle, valeur)

Quelques méthodes et fonctions

La fonction len() permet de connaitre le nombre d’items :

  1. fiche = {"Prénom" : "Bruce", "Nom" : "Wayne", "Age" : 45}
  2. print(len(fiche))
  3. '''
  4. 3
  5. '''

Télécharger

La méthode get(key) permet de renvoyer la valeur d’une clé présente :

  1. print(fiche.get("Nom"))
  2. '''
  3. Wayne
  4. '''
  5. print(fiche.get("Adresse"))
  6. '''
  7. None
  8. '''

Télécharger

La méthode setdefault(key, defaultVal), renvoie, si la clé existe, sa valeur, si la clé n’existe pas, insère la clé avec la valeur defaultVal et renvoie sa valeur.

  1. print(fiche.setdefault("Adresse","1007 Mountain Drive, Gotham City"))
  2. '''
  3. 1007 Mountain Drive, Gotham City
  4. '''
  5. print(fiche)
  6. '''
  7. {'Prénom': 'Bruce', 'Nom': 'Wayne', 'Age': 45, 'Adresse': '1007 Mountain Drive, Gotham City'}
  8. '''

Télécharger

La fonction del() permet de détruire une clé (et sa valeur associée) :

  1. fiche = {"Prénom" : "Bruce", "Nom" : "Wayne", "Age" : 45}
  2. del(fiche["Age"])
  3. print(fiche)
  4. '''
  5. {'Prénom': 'Bruce', 'Nom': 'Wayne'}
  6. '''

Télécharger

La méthode clear() permet d’effacer toutes les données contenues dans un dictionnaire :

  1. fiche.clear()
  2. print(fiche)
  3. '''
  4. {}
  5. '''
  6.  
  7. La fonction {{dict()}} permet de créer un dictionnaire :
  8.  
  9. avion = dict(Marque="Dassault", Modèle = "Rafale", Année = 2002 )
  10. print(avion)
  11. '''
  12. {'Marque': 'Dassault', 'Modèle': 'Rafale', 'Année': 2002}
  13. '''

Télécharger

La méthode update() permet d’insérer un item dans un dictionnaire :

  1. avion.update({"Moteur(s)" : 2})
  2. print(avion)
  3. '''
  4. {'Marque': 'Dassault', 'Modèle': 'Rafale', 'Année': 2002, 'Moteur': 2}
  5. '''

Télécharger

Test d’appartenance

Pour déterminer si une clé spécifique est présente dans un dictionnaire, on utilise le mot clé in :

  1. perso_inconnu = {'Prénom' : 'John', 'Nom' : 'Doe'}
  2. print("Prénom" in perso_inconnu)
  3. '''
  4. True
  5. '''
  6. print("Taille" in perso_inconnu)
  7. '''
  8. False
  9. '''

Télécharger

Copie d’un dictionnaire

On ne peut pas créer une copie d’un dictionnaire simplement en tapant dico2 = dico1, car dico2 ne sera qu’une référence à dico1 et pas un objet indépendant. Ainsi, les modifications apportées dans dico1 seront automatiquement également apportées dans dico2.

  1. voiture1 = {
  2.   "Marque": "Porsche",
  3.   "Modèle": "Carrera",
  4.   "Année": 2003
  5. }
  6. voiture1_copie  = voiture1
  7. voiture1.clear()
  8. print(voiture1_copie)
  9. '''
  10. {}
  11. '''

Télécharger

Une façon simple de copier un dictionnaire consiste à utiliser la méthode copy ().

  1. voiture2 = {
  2.   "Marque": "Ford",
  3.   "Modèle": "Mustang",
  4.   "Année": 1964
  5. }
  6. voiture2_copie  = voiture2.copy()
  7. voiture2.clear()
  8. print(voiture2_copie)
  9. '''
  10. {'Marque': 'Ford', 'Modèle': 'Mustang', 'Année': 1964}
  11. '''

Télécharger

On peut également réaliser une copie avec la fonction dict() :

  1. voiture3 = {
  2.   "Marque": "Ferrari",
  3.   "Modèle": "Testarossa",
  4.   "Année": 1996
  5. }
  6. voiture3_copie  = dict(voiture2)
  7. voiture3.clear()
  8. print(voiture3_copie)
  9. '''
  10. {'Marque': 'Ferrari', 'Modèle': 'Testarossa', 'Année': 1996}
  11. '''

Télécharger

Dictionnaires par compréhension

Le principe est le même que pour les listes.

  1. dico = {x: 2 * x for x in range(4)}
  2. print(dico)
  3. '''
  4. {0: 0, 1: 2, 2: 4, 3: 6}.
  5. '''

Télécharger

Dictionnaire de dictionnaires

Un dictionnaire peut également contenir d’autres dictionnaires : c’est ce qu’on appelle des dictionnaires imbriqués.

  1. voiture1 = {
  2.   "Marque": "Porsche",
  3.   "Modèle": "Carrera",
  4.   "Année": 2003
  5. }
  6.  
  7. voiture2 = {
  8.   "Marque": "Ford",
  9.   "Modèle": "Mustang",
  10.   "Année": 1964
  11. }
  12.  
  13. voiture3 = {
  14.   "Marque": "Ferrari",
  15.   "Modèle": "Testarossa",
  16.   "Année": 1996
  17. }
  18.  
  19. voitures = {"voiture1" : voiture1, "voiture2" : voiture2, "voiture3" : voiture3}
  20. print(voitures)
  21. '''
  22. {'voiture1': {'Marque': 'Porsche', 'Modèle': 'Carrera', 'Année': 2003},
  23. 'voiture2': {'Marque': 'Ford', 'Modèle': 'Mustang', 'Année': 1964},
  24. 'voiture3': {'Marque': 'Ferrari', 'Modèle': 'Testarossa', 'Année': 1996}}
  25. '''
  26. print(voitures["voiture2"])
  27. '''
  28. {'Marque': 'Ford', 'Modèle': 'Mustang', 'Année': 1964}
  29. '''
  30. print(voitures["voiture2"]["Modèle"])
  31. '''
  32. Mustang
  33. '''

Télécharger

Il est possible de parcourir tous les éléments d’un dictionnaire de dictionnaires en utilisant deux boucles for imbriquées :

  1. # Parcourt du dictionnaire principal (on récupère dans la variable valeur les dictionnaires secondaires)
  2. for (cle,valeur) in voitures.items():
  3.     # Parcourt des dictionnaires imbriqués
  4.     for (sous_cle,sous_valeur) in valeur.items() :
  5.         print(sous_cle,' : ' sous_valeur)
  6. '''
  7. Marque  : Porsche
  8. Modèle  : Carrera GT
  9. Année  : 2003
  10. Marque  : Ford
  11. Modèle  : Mustang
  12. Année  : 1964
  13. Marque  : Ferrari
  14. Modèle  : Testarossa
  15. Année  : 1996
  16. '''

Télécharger