Triskill

Les dictionnaires Python

Un dictionnaire est un ensemble de clés : valeurs séparées par des virgules le tout encadré par des accolades.

Voici un premier exemple :

- numpy - pandas oie_cendree = {'country': 'FI', 'Français': 'oie cendrée', 'speciesname': 'Anser anser', 'prises': '8900.0'}

La clé country du dictionnaire oie_cendree a pour valeur FI.

Signification concrète de ce dictionnaire : 

Il s’agit de caractériser un oiseau surveillé par l’Union européenne.

prises  indique le nombre d’oiseaux d’une certaine espèce, dont le nom est Français et sa traduction en latin speciesname,  chassés en 2018 au sein du pays country .

FI désigne la Finlande.

Oies cendrées - Mickael Guyomard
Voici quelques manipulations de base :
# Récupérer les valeurs des clés phrase = "L’" + oie_cendree['Français'] + " a été chassé " + str(int(float(oie_cendree['prises']))) + " fois avec succès en 2018 en " + oie_cendree['country'] phrase
# Modifier la valeur d’une clé oie_cendree['prises'] = 23 phrase = "L’" + oie_cendree['Français'] + " a été chassé " + str(int(float(oie_cendree['prises']))) + " fois avec succès en 2019 en " + oie_cendree['country'] phrase
# Voici un autre dictionnaire (un autre oiseau) fuligule_morillon = {'country': 'FI', 'Français': 'fuligule morillon', 'speciesname': 'Aythya fuligula'} # Ajout du nombre de prises fuligule_morillon['prises'] = 2200.0 # Vérication de la mise à jour fuligule_morillon
Fuligule morillon - Tristan Yvon
# Modifier l'intitulé d’une clé à l’aide d’un … dictionnaire ! nouvelles_cles = {'country': 'pays', 'Français': 'francais', 'speciesname': 'latin', 'prises': 'prises'} oie_cendree = dict([(nouvelles_cles.get(key), value) for key, value in oie_cendree.items()]) phrase = "L’" + oie_cendree['francais'] + " a été chassé " + str(int(float(oie_cendree['prises']))) + " fois avec succès en 2019 en " + oie_cendree['pays'] phrase
oie_cendree

Exercice 1

Il peut être pratique de constituer des listes (python) de dictionnaires.

Ici, par exemple, pour avoir la liste des oiseaux chassés en Finlande et en Lettonie parmi ceux qui sont surveillés par l’Union européenne.

liste_oiseaux = [{'country': 'FI', 'Français': 'Oie cendrée', 'speciesname': 'Anser anser', 'prises': '8900.0'}, {'country': 'FI', 'Français': 'Bernache du Canada', 'speciesname': 'Branta canadensis', 'prises': '8300.0'}, {'country': 'FI', 'Français': "Sarcelle d'hiver", 'speciesname': 'Anas crecca', 'prises': '93300.0'}, {'country': 'LV', 'Français': "Sarcelle d'hiver", 'speciesname': 'Anas crecca', 'prises': '1385.0'}, {'country': 'FI', 'Français': 'Canard colvert', 'speciesname': 'Anas platyrhynchos', 'prises': '180200.0'}, {'country': 'LV', 'Français': 'Canard colvert', 'speciesname': 'Anas platyrhynchos', 'prises': '17766.0'}, {'country': 'FI', 'Français': 'Canard pilet', 'speciesname': 'Anas acuta', 'prises': '8600.0'}, {'country': 'FI', 'Français': 'Fuligule morillon', 'speciesname': 'Aythya fuligula', 'prises': '2200.0'}, {'country': 'FI', 'Français': 'Faisan de Colchide', 'speciesname': 'Phasianus colchicus', 'prises': '28300.0'}, {'country': 'LV', 'Français': 'Faisan de Colchide', 'speciesname': 'Phasianus colchicus', 'prises': '1.0'}, {'country': 'FI', 'Français': 'Bécasse des bois', 'speciesname': 'Scolopax rusticola', 'prises': '3800.0'}, {'country': 'LV', 'Français': 'Bécasse des bois', 'speciesname': 'Scolopax rusticola', 'prises': '486.0'}, {'country': 'LV', 'Français': 'Pigeon biset', 'speciesname': 'Columba livia', 'prises': '859.0'}, {'country': 'FI', 'Français': 'Canard siffleur', 'speciesname': 'Mareca penelope', 'prises': '24600.0'}, {'country': 'LV', 'Français': 'Canard siffleur', 'speciesname': 'Mareca penelope', 'prises': '592.0'}, {'country': 'FI', 'Français': "Sarcelle d'été", 'speciesname': 'Spatula querquedula', 'prises': '9000.0'}, {'country': 'LV', 'Français': "Sarcelle d'été", 'speciesname': 'Spatula querquedula', 'prises': '240.0'}, {'country': 'FI', 'Français': 'Canard souchet', 'speciesname': 'Spatula clypeata', 'prises': '1900.0'}, {'country': 'LV', 'Français': 'Canard souchet', 'speciesname': 'Spatula clypeata', 'prises': '315.0'}, {'country': 'LV', 'Français': 'Canard chipeau', 'speciesname': 'Mareca strepera', 'prises': '1066.0'}]
phrase = "Cette liste comporte " + str(len(liste_oiseaux)) + " oiseaux" phrase import random n = random.randint(0,len(liste_oiseaux)) # permet d'afficher un oiseau au hasard liste_oiseaux[n]

Exercice 2

Revenons à notre liste d’oiseaux initiale.

 

# modification des noms des clés (exercice 2) nouvelles_cles = {'country': 'pays', 'Français': 'francais', 'speciesname': 'latin', 'prises': 'prises'} for i in range(len(liste_oiseaux)): liste_oiseaux[i] = dict([(nouvelles_cles.get(key), value) for key, value in liste_oiseaux[i].items()]) effectif = [] # on initialise la liste des dictionnaires oiseau, prises unique = [] # contiendra la liste des oiseaux concernés sans répétition for oiseau in liste_oiseaux : # oiseau est un dictionnaire if not(oiseau['francais'] in unique): # si on n'a pas déjà un nombre de prises enregistré unique.append(oiseau['francais']) # on l'ajoute aux deux listes effectif.append({"oiseau":oiseau['francais'],"prises":int(float(oiseau['prises']))}) else: for couple in effectif :# si l'oiseau est déjà présent on met à jour l'effectif de prises if couple['oiseau']==oiseau['francais']: couple['prises'] = couple['prises'] + int(float(oiseau['prises'])) effectif

Exercice 3