| |
| python:bases:dictionnaires [2021/08/11 18:05] – phil | python:bases:dictionnaires [2025/06/19 19:29] (Version actuelle) – modification externe 127.0.0.1 |
|---|
| ===== Python - Dictionnaires ===== | ===== Python - Dictionnaires ===== |
| |
| [Mise à jour le : 30/6/2021] | [Mise à jour le : 16/8/2022] |
| |
| * **Sources** | * **Sources** |
| * **Real Python** | * **Real Python** |
| * <html><a href="https://realpython.com/python-ordereddict/" target="_blank">OrderedDict vs dict in Python: The Right Tool for the Job</a></html> | * <html><a href="https://realpython.com/python-ordereddict/" target="_blank">OrderedDict vs dict in Python: The Right Tool for the Job</a></html> |
| * <html><a href="https://realpython.com/python-collections-module/" target="_blank">Python's collections: A Buffet of Specialized Data Types</a></html> | * <html><a href="https://realpython.com/sort-python-dictionary/" target="_blank">Sorting a Python Dictionary: Values, Keys, and More</a></html> |
| |
| * ** Mots-clés** : dictionnaire, parcours de dictionnaires. | * ** Mots-clés** : dictionnaire, parcours de dictionnaires. |
| |
| <note important>Les mots ci-dessous sont dits "réservés". Ils ne peuvent pas être utilisés comme nom de variable. Les mots __soulignés__ sont une nouveauté de Python 3. Les mots en **gras** sont utilisés dans cette page.</note> | <callout type="warning" icon="true">Les mots ci-dessous sont dits "réservés". Ils ne peuvent pas être utilisés comme nom de variable. Les mots __soulignés__ sont une nouveauté de Python 3. Les mots en **gras** sont utilisés dans cette page.</callout> |
| |
| | and | continue | finally | **is** | raise | | | and | continue | finally | **is** | raise | |
| Le dictionnaire est une implémentation de table de hash. Il permet l'accès, l'insertion et le test d'appartenance indépendamment du nombre d'éléments. Le dictionnaire est un objet conteneur. À la différence des séquences, qui sont indexées par des nombres, les dictionnaires sont indexés par des **clés**, qui peuvent être de n'importe quel type immuable ; les chaînes de caractères et les nombres peuvent toujours être des clés. | Le dictionnaire est une implémentation de table de hash. Il permet l'accès, l'insertion et le test d'appartenance indépendamment du nombre d'éléments. Le dictionnaire est un objet conteneur. À la différence des séquences, qui sont indexées par des nombres, les dictionnaires sont indexés par des **clés**, qui peuvent être de n'importe quel type immuable ; les chaînes de caractères et les nombres peuvent toujours être des clés. |
| |
| <note>Les **dictionnaires** sont des objets **mutables**. Leur structure n'est pas ordonnée (ceci est dû à l'action de la fonction de hachage).Les **clés** doivent avoir un **type immuable**.</note> | <callout type="primary" icon="true">Les **dictionnaires** sont des objets **mutables**. Leur structure n'est pas ordonnée (ceci est dû à l'action de la fonction de hachage).Les **clés** doivent avoir un **type immuable**.</callout> |
| |
| ==== 2. Création ==== | ==== 2. Création ==== |
| <note>On utilise l'expression suivante : //nom_dictionnaire// = **dict()** ou //nom_dictionnaire// = **{}** pour créer des dictionnaires vides.</note> | <callout type="primary" icon="true">On utilise l'expression suivante : //nom_dictionnaire// = **dict()** ou //nom_dictionnaire// = **{}** pour créer des dictionnaires vides.</callout> |
| |
| //Exemples// | //Exemples// |
| </code> | </code> |
| |
| <note>Les **accolades** délimitent les **dictionnaires**.</note> | <callout type="primary" icon="true">Les **accolades** délimitent les **dictionnaires**.</callout> |
| |
| ==== 3. Lecture de la valeur d'un élément ==== | ==== 3. Lecture de la valeur d'un élément ==== |
| |
| ==== 4. Ajout ou modification d'un élément ==== | ==== 4. Ajout ou modification d'un élément ==== |
| <note>Le dictionnaire est un type **mutable**, et donc on peut **modifier la valeur** associée à une clé. On utilise l'expression suivante : //nom_dictionnaire//**[****//clé//****]** = //**valeur**//. Et de la même jaçon, **ajouter une entrée**.</note> | <callout type="primary" icon="true">Le dictionnaire est un type **mutable**, et donc on peut **modifier la valeur** associée à une clé. On utilise l'expression suivante : //nom_dictionnaire//**[****//clé//****]** = //**valeur**//. Et de la même jaçon, **ajouter une entrée**.</callout> |
| |
| //Exemples// | //Exemples// |
| |
| ==== 5. Suppression d'éléments ==== | ==== 5. Suppression d'éléments ==== |
| <note>On utilise **del**(//nom_dictionnaire//**[****//clé//****]**) ou //nom_dictionnaire//.**pop**("**clé**"). pop renvoie la valeur.</note> | <callout type="primary" icon="true">On utilise **del**(//nom_dictionnaire//**[****//clé//****]**) ou //nom_dictionnaire//.**pop**("**clé**"). pop renvoie la valeur.</callout> |
| |
| <code python *.py> | <code python *.py> |
| |
| === 6.1 Parcours des clés et valeurs simultanément === | === 6.1 Parcours des clés et valeurs simultanément === |
| <note>On utilise la méthode **items** de la classe **dict**. Elle renvoie une **liste**, contenant les couples **clé : valeur**, sous la forme d'un tuple.</note> | <callout type="primary" icon="true">On utilise la méthode **items** de la classe **dict**. Elle renvoie une **liste**, contenant les couples **clé : valeur**, sous la forme d'un tuple.</callout> |
| |
| <code python *.py> | <code python *.py> |
| |
| === 6.2 Parcours des clés === | === 6.2 Parcours des clés === |
| <note>On utilise la méthode **keys**() de la classe **dict**.</note> | <callout type="primary" icon="true">On utilise la méthode **keys**() de la classe **dict**.</callout> |
| |
| <code python *.py> | <code python *.py> |
| </code> | </code> |
| |
| <note>L'itérateur sur les dictionnaires itère directement sur les clés.</note> | <callout type="primary" icon="true">L'itérateur sur les dictionnaires itère directement sur les clés.</callout> |
| |
| //Exemple// | //Exemple// |
| |
| === 6.3 Parcours des valeurs === | === 6.3 Parcours des valeurs === |
| <note>On utilise la méthode **values**() de la classe **dict**.</note> | <callout type="primary" icon="true">On utilise la méthode **values**() de la classe **dict**.</callout> |
| |
| <code python *.py> | <code python *.py> |
| </code> | </code> |
| |
| | <callout type="tip" icon="true">Les méthodes **keys**(), **values**() et **items**() retournent un objet particulier appelé : **une vue** (itérable et possédant le test d'appartenance). La caractéristique principale d'une vue est qu'elle est **mise à jour** en même temps que le dictionnaire.</callout> |
| | |
| <note tip>Les méthodes **keys**(), **values**() et **items**() retournent un objet particulier appelé : **une vue** (itérable et possédant le test d'appartenance). La caractéristique principale d'une vue est qu'elle est **mise à jour** en même temps que le dictionnaire.</note> | |
| |
| // Exemple // | // Exemple // |
| </code> | </code> |
| ==== 7. Formation d'un dictionnaire à partir de deux listes ==== | ==== 7. Formation d'un dictionnaire à partir de deux listes ==== |
| <note>On utilise l'expression suivante : //nom_dictionnaire// = **dict**(**zip**(//listeClés//,//listeVal//))</note> | <callout type="primary" icon="true">On utilise l'expression suivante : //nom_dictionnaire// = **dict**(**zip**(//listeClés//,//listeVal//))</callout> |
| |
| //Exemples// | //Exemples// |
| </code> | </code> |
| |
| <note important>Problème : l'accès à un enregistrement suppose ici que l'on connaisse sa position. | <callout type="warning" icon="true">Problème : l'accès à un enregistrement suppose ici que l'on connaisse sa position. |
| </note> | </callout> |
| |
| ===9.2 Un dictionnaire pour indexer les enregistrements === | ===9.2 Un dictionnaire pour indexer les enregistrements === |
| <note tip>Pour modéliser ces informations, il est plus adapté d'utiliser, non pas une liste, mais un **dictionnaire de dictionnaires**.</note> | <callout type="tip" icon="true">Pour modéliser ces informations, il est plus adapté d'utiliser, non pas une liste, mais un **dictionnaire de dictionnaires**.</callout> |
| |
| //Exemple// | //Exemple// |