Aller au contenu

Dictionnaires Python

I. Notions de dictionnaire⚓︎

1.1. 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ée un dictionnaire en indiquant les couples clé / valeur entre accolade et séparés par des virgules :

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

1.2. Propriétés⚓︎

  • Les dictionnaires sont des conteneurs comme les listes et les tuples.
  • Les dictionnaires sont mutables, c'est-à-dire que l'on peut modifier leur contenu.
  • Les dictionnaires, par contre, ne sont pas 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 mutables 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.

II. Créer et utiliser un dictionnaire⚓︎

2.1. Initialiser et accéder aux é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.

🐍 Editeur
1
2
3
4
5
6
7
8
# Initialisation d'un dictionnaire vide
mon_dico = {}

# Initialisation d'un dictionnaire non vide
joueur = {'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 16}

# Affichage de la valeur associée à une clé
print(joueur['nom'])
▶️ Console
LEBRUN

2.2. Modifier un dictionnaire et parcourir tous ses éléments⚓︎

2.2.1. Ajouter un nouveau couple clé / valeur⚓︎

🐍 Editeur
joueur['club'] = 'Montpellier TT'
print(joueur)
▶️ Console
{'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 16, 'club': 'Montpellier TT'}

2.2.2. Modifier la valeur associée à une clé déjà présente⚓︎

🐍 Editeur
joueur['age'] = '17'
print(joueur)
▶️ Console
{'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 17, 'club': 'Montpellier TT'}

2.2.3. Parcourir les clés⚓︎

🐍 Editeur
for cle in joueur.keys():
    print(cle)
▶️ Console
nom
prenom
age
club

2.2.4. Parcourir les valeurs⚓︎

🐍 Editeur
for valeur in joueur.values():
    print(valeur)
▶️ Console
LEBRUN
Félix
17
Montpellier TT

2.2.5. Parcourir les couples clés/valeurs⚓︎

🐍 Editeur
for (cle, valeur) in joueur.items():
    print(cle, ":", valeur)
▶️ Console
nom : LEBRUN
prenom : Félix
age : 17
club : Montpellier TT
Remarque : dans ce cas, l'itération porte sur le tuple (cle, valeur).

III. Principales fonctions et méthodes⚓︎

Objectif : connaître quelques fonctions et méthodes s'appliquant sur des dictionnaires

3.1. La fonction len()⚓︎

La fonction len() permet de connaître le nombre d'items.

🐍 Editeur
joueur = {'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 17, 'club': 'Montpellier TT'}
print(len(joueur))
▶️ Console
4

3.2. La méthode get()⚓︎

La méthode get() permet de renvoyer la valeur d'une clé présente.

🐍 Editeur
print(joueur.get('nom'))
▶️ Console
LEBRUN

3.3. La méthode setfefault(key, default_value)⚓︎

La méthode setdefault(key, default_value) renvoie :

  • si la clé existe, sa valeur,
  • si la clé n'existe pas, insère la clé avec la valeur default_value et renvoie sa valeur.
🐍 Editeur
joueur = {'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 17, 'club': 'Montpellier TT'}
print(joueur.setdefault("rang", 8))
print(joueur)
▶️ Console
8
{'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 17, 'club': 'Montpellier TT', 'rang': 8}

3.4. La fonction del()⚓︎

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

🐍 Editeur
joueur = {'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 17, 'club': 'Montpellier TT'}
del(joueur['club'])
print(joueur)
▶️ Console
{'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 17}

3.5. La méthode clear()⚓︎

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

🐍 Editeur
joueur = {'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 17, 'club': 'Montpellier TT'}
joueur.clear()
print(joueur)
▶️ Console
{}

3.6. La fonction dict()⚓︎

La fonction dict() permet de créer un dictionnaire.

🐍 Editeur
joueur2 = dict(nom="MA", prenom="Long", age=35, club="Tianjin Quanjian")
print(joueur2)
▶️ Console
{'nom': 'MA', 'prenom': 'Long', 'age': 35, 'club': 'Tianjin Quanjian'}

3.7. La méthode update()⚓︎

La méthode update() permet de mettre à jour un dictionnaire existant avec les clés et les valeurs d'un autre dictionnaire ou d'une liste de paires clé-valeur.

La syntaxe est du type dictionnaire1.update(dictionnaire2) où :

  • dictionnaire1 est le dictionnaire à mettre à jour.
  • dictionnaire2 est le dictionnaire qui contient les nouvelles clés et valeurs.

🐍 Editeur
# Créer un dictionnaire
dict1 = {"a": 1, "b": 2}

# Mettre à jour dict1 avec une liste de paires clé-valeur
dict1.update([("c", 3), ("d", 4)])

# Afficher le résultat
print(dict1)
▶️ Console
{'a': 1, 'b': 2, 'c': 3, 'd': 4}

IV. Test d'appartenance⚓︎

Objectif : tester la présence d'une clé

Pour déterminer si une clé spécifique est présente dans un dictionnaire, on utilise le mot clé in (opérateur logique).

🐍 Editeur
joueur = {'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 17, 'club': 'Montpellier TT'}
print('prenom' in joueur)
print('rang' in joueur)
▶️ Console
True
False

V. Copie d'un dictionnaire⚓︎

Objectif : comprendre la notion de copie

Comme les listes, les dictionnaires sont des objets mutables, c'est-à-dire que leurs contenus peuvent changer.

⚠️ Des variables différentes peuvent référencer (ou pointer vers) les mêmes ojets. ⚠️

5.1. Notion de copie⚓︎

Comme avec les listes, on ne peut pas créer une copie d'un dictionnaire simplement en tapantdico2 = dicol, car dico2 ne sera qu'une référence à dicol et pas un objet indépendant. Ainsi, les modifications apportées dans dicol seront automatiquement également apportées dans dico2.

🐍 Editeur
joueur1 = {'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 17}
joueur2 = joueur1
joueur1.clear()
print(joueur1, joueur2)
▶️ Console
{} {}

5.2. La méthode copy()⚓︎

On peut créer une copie de dictionnaire avec la méthode copy().

Ainsi pour réaliser une copie de dicol indépendante dans dico2, c'est-à-dire, que cette fois-ci les modifications effectuées dans dicol n'affectent pas le contenu de dico2.

🐍 Editeur
joueur1 = {'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 17}
joueur2 = joueur1.copy()
joueur1.clear()
print(joueur1, joueur2)
▶️ Console
{} {'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 17}

5.3. La fonction dict()⚓︎

On peut aussi réaliser une copie de dictionnaire avec la fonction dict().

🐍 Editeur
joueur1 = {'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 17}
joueur2 = dict(joueur1)
joueur1.clear()
print(joueur1, joueur2)
▶️ Console
{} {'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 17}

VI. Dictionnaire par compréhension⚓︎

Objectif : construire un dictionnaire par compréhension

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

🐍 Editeur
dico = {str(x): x**2 if x%2 == 0 else x+1 for x in range(10)}
print(dico)
▶️ Console
{'0': 0, '1': 2, '2': 4, '3': 4, '4': 16, '5': 6, '6': 36, '7': 8, '8': 64, '9': 10}

VII. Dictionnaire de dictionnaires⚓︎

Objectif : construire un dictionnaire de dictionnaires

7.1. Principe⚓︎

Un dictionnaire peut également contenir d'autres dictionnaires, c'est ce qu'on appelle alors des « dictionnaires imbriqués ».

🐍 Editeur
joueur1 = {'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 17}
joueur2 = {'nom': 'LEBRUN', 'prenom': 'Alexis', 'age': 20}
joueur3 = {'nom': 'GAUZY', 'prenom': 'Simon', 'age': 29}

joueurs = {'joueur1': joueur1, 'joueur2': joueur2, 'joueur3': joueur3}
print(joueurs)
▶️ Console
{'joueur1': {'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 17}, 'joueur2': {'nom': 'LEBRUN', 'prenom': 'Alexis', 'age': 20}, 'joueur3': {'nom': 'GAUZY', 'prenom': 'Simon', 'age': 29}}

7.2. Parcours des éléments⚓︎

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

🐍 Editeur
joueur1 = {'nom': 'LEBRUN', 'prenom': 'Félix', 'age': 17}
joueur2 = {'nom': 'LEBRUN', 'prenom': 'Alexis', 'age': 20}
joueur3 = {'nom': 'GAUZY', 'prenom': 'Simon', 'age': 29}

joueurs = {'joueur1': joueur1, 'joueur2': joueur2, 'joueur3': joueur3}

# Parcours du dictionnaire principal
for (cle, valeur) in joueurs.items():
    # Parcours des dictionnaires imbriqués
    for (sous_cle, sous_valeur) in valeur.items():
        print(joueurs[cle][sous_cle])
▶️ Console
LEBRUN
Félix
17
LEBRUN
Alexis
20
GAUZY
Simon
29

Vidéo de David LATOUCHE : Les dictionnaires - Python⚓︎

Les dictionnaires (8:10)

Vidéo LUMNI : Les dictionnaires en Python⚓︎

Les dictionnaires - Lumni (29:00)