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 :
- 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 :
- # Initialisation d'un dictionnaire vide
- mon_dictionnaire = {}
- # Initialisation d'un dictionnaire non vide
- personnage = {"Nom" : "Yoda", "Age" : 900}
- # Affichage de la valeur associée à chaque clé
- print(personnage["Nom"])
- '''
- 'Yoda'
- '''
- print(personnage["Age"])
- '''
- 900
- '''
- print(personnage["Taille"])
- '''
- KeyError "Taille"
- '''
Modifier un dictionnaire et parcourir tous ses éléments
On ajoute un couple clé / valeur de la manière suivante :
- personnage["Taille"] = 0.66
- print(personnage)
- '''
- {"Nom" : "Yoda", "Age" : 900, "Taille" : 0.66}
- '''
On modifie de la même façon la valeur associée à une clé déjà présente :
- personnage["Age"] = 901
- print(personnage)
- '''
- {"Nom" : "Yoda", "Age" : 901, "Taille" : 0.66}
- '''
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 :
- for cle in personnage.keys() :
- print(cle)
- '''
- Nom
- Age
- Taille
- '''
- Itération sur les valeurs :
- for valeur in personnage.values() :
- print(valeur)
- '''
- Yoda
- 901
- 0.66
- '''
- Itération sur les couples clé / valeur :
- for (cle, valeur) in personnage.items() :
- print (cle, " : ", valeur)
- '''
- Nom : Yoda
- Age : 901
- Taille : 0.66
- '''
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 :
- fiche = {"Prénom" : "Bruce", "Nom" : "Wayne", "Age" : 45}
- print(len(fiche))
- '''
- 3
- '''
La méthode get(key) permet de renvoyer la valeur d’une clé présente :
- print(fiche.get("Nom"))
- '''
- Wayne
- '''
- print(fiche.get("Adresse"))
- '''
- None
- '''
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.
- print(fiche.setdefault("Adresse","1007 Mountain Drive, Gotham City"))
- '''
- 1007 Mountain Drive, Gotham City
- '''
- print(fiche)
- '''
- {'Prénom': 'Bruce', 'Nom': 'Wayne', 'Age': 45, 'Adresse': '1007 Mountain Drive, Gotham City'}
- '''
La fonction del() permet de détruire une clé (et sa valeur associée) :
- fiche = {"Prénom" : "Bruce", "Nom" : "Wayne", "Age" : 45}
- del(fiche["Age"])
- print(fiche)
- '''
- {'Prénom': 'Bruce', 'Nom': 'Wayne'}
- '''
La méthode clear() permet d’effacer toutes les données contenues dans un dictionnaire :
- fiche.clear()
- print(fiche)
- '''
- {}
- '''
- La fonction {{dict()}} permet de créer un dictionnaire :
- avion = dict(Marque="Dassault", Modèle = "Rafale", Année = 2002 )
- print(avion)
- '''
- {'Marque': 'Dassault', 'Modèle': 'Rafale', 'Année': 2002}
- '''
La méthode update() permet d’insérer un item dans un dictionnaire :
- avion.update({"Moteur(s)" : 2})
- print(avion)
- '''
- {'Marque': 'Dassault', 'Modèle': 'Rafale', 'Année': 2002, 'Moteur': 2}
- '''
Test d’appartenance
Pour déterminer si une clé spécifique est présente dans un dictionnaire, on utilise le mot clé in :
- perso_inconnu = {'Prénom' : 'John', 'Nom' : 'Doe'}
- print("Prénom" in perso_inconnu)
- '''
- True
- '''
- print("Taille" in perso_inconnu)
- '''
- False
- '''
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.
- voiture1 = {
- "Marque": "Porsche",
- "Modèle": "Carrera",
- "Année": 2003
- }
- voiture1_copie = voiture1
- voiture1.clear()
- print(voiture1_copie)
- '''
- {}
- '''
Une façon simple de copier un dictionnaire consiste à utiliser la méthode copy ().
- voiture2 = {
- "Marque": "Ford",
- "Modèle": "Mustang",
- "Année": 1964
- }
- voiture2_copie = voiture2.copy()
- voiture2.clear()
- print(voiture2_copie)
- '''
- {'Marque': 'Ford', 'Modèle': 'Mustang', 'Année': 1964}
- '''
On peut également réaliser une copie avec la fonction dict() :
- voiture3 = {
- "Marque": "Ferrari",
- "Modèle": "Testarossa",
- "Année": 1996
- }
- voiture3_copie = dict(voiture2)
- voiture3.clear()
- print(voiture3_copie)
- '''
- {'Marque': 'Ferrari', 'Modèle': 'Testarossa', 'Année': 1996}
- '''
Dictionnaires par compréhension
Le principe est le même que pour les listes.
- dico = {x: 2 * x for x in range(4)}
- print(dico)
- '''
- {0: 0, 1: 2, 2: 4, 3: 6}.
- '''
Dictionnaire de dictionnaires
Un dictionnaire peut également contenir d’autres dictionnaires : c’est ce qu’on appelle des dictionnaires imbriqués.
- voiture1 = {
- "Marque": "Porsche",
- "Modèle": "Carrera",
- "Année": 2003
- }
- voiture2 = {
- "Marque": "Ford",
- "Modèle": "Mustang",
- "Année": 1964
- }
- voiture3 = {
- "Marque": "Ferrari",
- "Modèle": "Testarossa",
- "Année": 1996
- }
- voitures = {"voiture1" : voiture1, "voiture2" : voiture2, "voiture3" : voiture3}
- print(voitures)
- '''
- {'voiture1': {'Marque': 'Porsche', 'Modèle': 'Carrera', 'Année': 2003},
- 'voiture2': {'Marque': 'Ford', 'Modèle': 'Mustang', 'Année': 1964},
- 'voiture3': {'Marque': 'Ferrari', 'Modèle': 'Testarossa', 'Année': 1996}}
- '''
- print(voitures["voiture2"])
- '''
- {'Marque': 'Ford', 'Modèle': 'Mustang', 'Année': 1964}
- '''
- print(voitures["voiture2"]["Modèle"])
- '''
- Mustang
- '''
Il est possible de parcourir tous les éléments d’un dictionnaire de dictionnaires en utilisant deux boucles for imbriquées :
- # Parcourt du dictionnaire principal (on récupère dans la variable valeur les dictionnaires secondaires)
- for (cle,valeur) in voitures.items():
- # Parcourt des dictionnaires imbriqués
- for (sous_cle,sous_valeur) in valeur.items() :
- print(sous_cle,' : ' sous_valeur)
- '''
- Marque : Porsche
- Modèle : Carrera GT
- Année : 2003
- Marque : Ford
- Modèle : Mustang
- Année : 1964
- Marque : Ferrari
- Modèle : Testarossa
- Année : 1996
- '''
Partager cette page