Les dictionnaires sous Python
L'essentiel à connaitre sur les dictionnaires ou comment organiser ses données de façon structurée
Caractéristiques
Le dictionnaire stocke les données sous forme structurée selon un schéma de type clé/valeur. Les
valeurs stockées comme les clés sont modifiables. Par ailleurs, depuis la version 3.7 de python, le
contenu d'un dictionnaire est ordonné.
Les clés, comme les valeurs, peuvent être de type chaine ou numérique, comme l'illustre l'exemple ci-dessous :
monDico = {
"nom": "Dupont",
"age": 64,
31: "M"
}
print("Edition complete :", monDico)
print("Acces via la cle 'nom' :", monDico['nom'])
print("Acces via la cle 31 :", monDico[31])
Edition complete : {'nom': 'Dupont', 'age': 64, 31: 'M'} Acces via la cle 'nom' : Dupont Acces via la cle 31 : M
Dans l'exemple, nous avons créé un dictionnaire nommé monDico dans lequel nous avons déclaré 3 entrées. Aux
clés "nom", "âge" et 31 nous avons respectivement associé les valeurs "Dupont", 64 et "M".
Les actions (modification, ajout, suppression) que nous allons évoquer dans la suite de cet article peuvent
en général être effectuées via des mots clés python ou via des méthodes de l'objet dictionnaire.
Modification des clés / valeurs
La valeur associée à une clé dans un dictionnaire se modifie très facilement puisqu'il s'agit simplement d'une affectation directe :
monDico['nom'] = 'Pierre'
print("Acces via le nom :", monDico['nom'])
Acces via le nom : Pierre
Coté méthode, la même chose peut être faite avec update, en précisant le nouveau couple clé valeur, comme ceci :
monDico.update({"nom": "Pierre"})
Lorsque l'on veut modifier la clé il faut d'abord créer la nouvelle clé en référence à l'ancienne puis supprimer l'espace qui lui était alloué, comme ceci :
monDico["sexe"] = monDico[31]
del monDico[31]
print("Edition complete :", monDico)
Edition complete : {'nom': 'Dupont', 'age': 64, 'sexe': 'M'}
Dans l'exemple ci-dessus nous avons remplacé la clé 31 par la clé "sexe". Coté méthode, c'est plus simple en utilisant
la pop. Pour rappel, pop supprime un item d'une liste et retourne la référence à celui-ci.
Cela nous économise par conséquent une étape :
monDico["sexe"] = monDico.pop(31)
print("Edition complete :", monDico)
Ajout d'une entrée
L'ajout d'une nouvelle entrée est assez intuitif dans la mesure où il faut simplement initialiser la nouvelle clé :
monDico["adresse"] = "3 boulevard Haussmann"
print("Edition complete :", monDico)
Edition complete : {'nom': 'Pierre', 'age': 64, 'adresse': '3 boulevard Haussmann', 'sexe': 'M'}
Coté méthode, update, que nous venons de voir, va venir ajouter l'entrée puisque celle-ci n'existe pas :
monDico.update({"adresse": "3 boulevard Haussmann"})
Suppression du dictionnaire ou d'une entrée
La suppression d'un élément peut se faire via le mot clé del, comme ceci :
del monDico["adresse"]
print("Edition complete :", monDico)
Edition complete : {'nom': 'Pierre', 'age': 64, 'sexe': 'M'}
Si aucune clé n'est précisée (del monDico), alors c'est le dictionnaire lui-même qui
sera supprimé. Del supprime la référence à l'adresse mémoire de l'objet, que ce soit un
élément du dictionnaire ou le dictionnaire lui-même, néanmoins l'espace alloué pour cet objet
est toujours bien présent. Si vous voulez supprimer cet espace et ainsi libérer de la mémoire, il
vous faut ajouter à la suite l'appel au garbage collector via l'instruction gc.collect().
Concernant la suppression d'une clé, coté méthode c'est pop que nous avons déjà vu plus haut
qui est à privilégier. A la différence de del, pop va retourner la valeur.
Enfin on peut noter qu'il est possible via l'instruction clear de vider un dictionnaire de son contenu :
monDico.clear()
print("Edition complete :", monDico)
Edition complete : {}
La clé existe-t-elle ?
Tout accès ou suppression d'une clé inexistante entrainera la génération d'une exception de type KeyError. Il est bien sur possible de gérer les exceptions. (ici un article traitant de ce sujet), néanmoins la vérification de l'existence d'une clé peut s'écrire ainsi :
("nom" in monDico)
Le code ci-dessus est interprété comme un booléen, il retournera donc True ou False.
Dictionnaires multi-niveaux
Tous nos exemples sont partis d'un dictionnaire simple qui contient des valeurs uni-dimensionnelles. Il faut néanmoins
préciser qu'une valeur peut être également une liste ou même un dictionnaire. Dans ce dernier cas nous
nous retrouvons donc avec deux dictionnaires imbriqués, mais il peut bien sûr y en avoir plus.
L'imbrication à outrance est en général à proscrire, pour des raisons de compréhension et de lisibilité du code.
Voici cependant ci-dessous un exemple de dictionnaire à 2 niveaux et la manière d'y accéder :
fiche = {
"nom": "Dupont",
"poste": {"direction" : "finance",
"service" : "comptabilite"}
}
print("Edition complete :", fiche)
print("Acces au service' :", fiche['poste']['service'])
Edition complete : {'nom': 'Dupont', 'poste': {'direction': 'finance', 'service': 'comptabilite'}} Acces au service' : comptabilite
Retrouvez dans la rubrique "Nos datasets" toutes les données dont vous aurez besoin pour tester et pratiquer !