Présentation des dictionnaires Python

Effectué

En Python, les variables peuvent stocker différents types de données. Précédemment, vous avez appris à stocker des chaînes et des nombres :

name = 'Earth'
moons = 1

Bien que cette méthode fonctionne pour les petites quantités de données, elle peut devenir très complexe si vous utilisez des données associées. Imaginez que vous voulez stocker des informations sur les lunes de la Terre et les lunes de Jupiter.

earth_name = 'Earth'
earth_moons = 1

jupiter_name = 'Jupiter'
jupiter_moons = 79

Notez que nous avons dupliqué des variables avec des préfixes différents. Cette duplication peut devenir lourde à gérer. Comme vous allez utiliser fréquemment des jeux de données associés, par exemple les précipitations moyennes au cours des mois dans différentes villes, le stockage de ces variables sous forme de valeurs individuelles n’est pas une option viable. Au lieu de cela, vous pouvez utiliser des dictionnaires Python.

Les dictionnaires Python vous permettent d’utiliser des jeux de données associés. Un dictionnaire est une collection de paires clé/valeur. Vous devez le voir comme un groupe de variables à l’intérieur d’un conteneur, et dont la clé est le nom de la variable, et la valeur est celle qui est stockée dans la variable.

Créer un dictionnaire

Python utilise des accolades ({ }) et le signe deux-points (:) pour désigner un dictionnaire. Vous pouvez soit créer un dictionnaire vide et y ajouter des valeurs ultérieurement, soit le remplir au moment de sa création. Chaque paire clé/valeur est séparée par un signe deux-points, et le nom de chaque clé est placé entre guillemets comme un littéral de chaîne. Étant donné que la clé est un littéral de chaîne, vous pouvez utiliser n’importe quel nom approprié pour décrire la valeur.

Nous allons créer un dictionnaire pour stocker le nom de la planète Terre et le nombre de lunes qu’elle a :

planet = {
    'name': 'Earth',
    'moons': 1
}

Vous avez deux clés : 'name' et 'moons'. Chaque clé se comporte à peu près de la même façon qu’une variable : elle a un nom unique et stocke une valeur. Toutefois, elles se trouvent à l’intérieur d’une même variable plus grande nommée planet.

Tout comme pour les variables habituelles, vous devez veiller à utiliser les bons types de données. Dans la valeur moons de 1 de l’exemple précédent, vous n’avez pas mis de guillemets autour du nombre, car vous souhaitez utiliser un entier. Si vous aviez utilisé '1', Python verrait cette variable comme une chaîne, ce qui affecterait votre capacité à effectuer des calculs.

Contrairement aux variables habituelles, les noms de clés n’ont pas besoin de suivre les règles de nommage standard de Python. Vous pouvez utiliser des noms de clé pour être plus descriptif dans votre code.

Lire les valeurs du dictionnaire

Vous pouvez lire des valeurs dans un dictionnaire. Les objets dictionnaire ont une méthode get que vous pouvez utiliser pour accéder à une valeur à l’aide de sa clé. Si vous souhaitez afficher le nom (name), vous pouvez utiliser le code suivant :

print(planet.get('name'))
Earth

Comme vous pouvez vous en douter, l’accès aux valeurs d’un dictionnaire est une opération courante. Heureusement, il existe un raccourci. Vous pouvez également passer la clé en la plaçant entre crochets ([ ]). Cette méthode utilise moins de code que get, et la plupart des programmeurs utilisent cette syntaxe à la place. Vous pouvez réécrire l’exemple précédent en utilisant le code suivant :

# planet['name'] is identical to using planet.get('name')
print(planet['name'])
Earth

Même si le comportement de get et l’utilisation de crochets ([ ]) sont généralement les mêmes pour la récupération des éléments, il existe une différence clé. Si une clé n’est pas disponible, get retourne None, et [ ] déclenche une KeyError.

wibble = planet.get('wibble') # Returns None
wibble = planet['wibble'] # Throws KeyError

Modifier les valeurs du dictionnaire

Vous pouvez également modifier les valeurs situées dans un objet dictionnaire, à l’aide de la méthode update. Cette méthode accepte un dictionnaire en tant que paramètre et met à jour toutes les valeurs existantes avec les nouvelles valeurs que vous fournissez. Si vous souhaitez modifier le name du dictionnaire planet, vous pouvez utiliser le code suivant, par exemple :

planet.update({'name': 'Makemake'})

# No output: name is now set to Makemake.

Le raccourci qui consiste à utiliser des crochets ([ ]) pour lire des valeurs peut également être utilisé pour modifier des valeurs. La principale différence de syntaxe est que vous utilisez = (parfois appelé opérateur d’assignation) pour fournir une nouvelle valeur. Pour réécrire l’exemple précédent en vue de modifier le nom, vous pouvez utiliser le code suivant :

planet['name'] = 'Makemake'

# No output: name is now set to Makemake.

Le principal avantage de update est qu’il permet de modifier plusieurs valeurs en une seule opération. Les deux exemples suivants ont une logique identique, mais leur syntaxe est différente. Vous êtes libre d’utiliser la syntaxe que vous jugez la plus appropriée. La plupart des développeurs choisissent d’utiliser des crochets pour mettre à jour des valeurs individuelles.

L’exemple suivant apporte les mêmes modifications à notre variable planet, en mettant à jour le nom et les lunes. Notez qu’en utilisant update, vous effectuez un seul appel à la fonction. L’utilisation de crochets, quant à elle, implique deux appels.

Utilisation de la mise à jour :

planet.update({
    'name': 'Jupiter',
    'moons': 79
})

Utilisation de crochets :

planet['name'] = 'Jupiter'
planet['moons'] = 79

Ajouter et supprimer des clés

Vous n’êtes pas obligé de créer toutes les clés lorsque vous initialisez un dictionnaire. En fait, vous n’avez même pas besoin de clés ! Chaque fois que vous souhaitez créer une clé, vous devez l’affecter comme vous le feriez pour une clé existante.

Supposons que vous souhaitiez mettre à jour planet pour inclure la période orbitale en jours :

planet['orbital period'] = 4333

# planet dictionary now contains: {
#   name: 'jupiter'
#   moons: 79
#   orbital period: 4333
# }

Important

Les noms de clés, comme tout en Python, respectent la casse. Par conséquent, 'name' et 'Name' sont considérées comme deux clés distinctes dans un dictionnaire Python.

Pour supprimer une clé, utilisez pop. pop retourne la valeur et supprime la clé du dictionnaire. Pour supprimer orbital period, vous pouvez utiliser le code suivant :

planet.pop('orbital period')

# planet dictionary now contains: {
#   name: 'jupiter'
#   moons: 79
# }

Types de données complexes

Les dictionnaires peuvent stocker n’importe quel type de valeur, y compris d’autres dictionnaires. Cela vous permet de modéliser des données complexes en fonction des besoins. Imaginons que vous ayez besoin de stocker le diamètre de planet, qui peut être mesuré autour de son équateur ou de ses pôles. Vous pouvez créer un autre dictionnaire à l’intérieur de planet pour stocker les informations suivantes :

# Add address
planet['diameter (km)'] = {
    'polar': 133709,
    'equatorial': 142984
}

# planet dictionary now contains: {
#   name: 'Jupiter'
#   moons: 79
#   diameter (km): {
#      polar: 133709
#      equatorial: 142984
#   }
# }

Pour récupérer des valeurs dans un dictionnaire imbriqué, vous pouvez chaîner des crochets ou des appels à get.

print(f'{planet["name"]} polar diameter: {planet["diameter (km)"]["polar"]}')
Jupiter polar diameter: 133709