🏁 Les dictionnaires Python
Remarque
Cette page rappelle rapidement les outils fondamentaux sur les dictionnaires Python.
Il ne s'agit pas d'un cours exhaustif sur ce thème.
Présentation
Un dictionnaire Python est une structure de données organisée sous forme de couples clé : valeur
.
Contrairement aux listes dans lesquelles les valeurs sont identifiées par leur indice, dans un dictionnaire, une valeur est associée à une clé. Ces clés peuvent être des entiers, des chaînes de carcactères, des tuples...
Considérons par exemple le dictionnaire suivant qui contient les dates de naissances de Roméo et Juliette :
🐍 Script Pythonnaissances= {
"Roméo": 20040517,
"Juliette": 20040417
}
"Roméo"
et "Juliette"
sont les clés du dictionnaire, 20040517
et 20040417
les valeurs associées.
Des clés immuables ?
Lors de la construction d'un dictionnaire, Python associe à chaque clé une valeur précise. Cette association repose sur le fait que la clé ne va pas évoluer au fil de l'exécution du programme. Si c'était le cas, l'association deviendrait caduque dès que la clé est modifiée.
Les clés des dictionnaires Python doivent donc être des objets non modifiables, immuables.
Retenons pour faire simple qu'une liste ne peut pas être utilisée comme clé d'un dictionnaire (car on peut la modifier au fil du programme).
Utilisation
On rappelle les opérations suivantes sur les dictionnaires :
Création
- Création d'un dictionnaire vide :
🐍 Script Pythonvide = { }
- Création d'un dictionnaire « à la main » :
🐍 Script Pythonanimal = {"nom": "Oli","espèce": "Chat","jour": 10,"mois": "juin","année": 2020}
Lecture de valeur
Les valeurs sont identifiées par leur clé. On accède à une valeur en utilisant des crochets :
🐍 Console Python>>> repertoire = {"firstname": "Clarissa","lastname": "Dalloway","day": 14,"month": "May","year": 1925}
>>> repertoire["firstname"]
'Clarissa'
>>> repertoire["day"]
14
Modification de valeur
- On modifie ou l'on ajoute des valeurs avec une simple affectation :
🐍 Console Python>>> echiquier = {(0, 0): "Roi blanc", (5, 1): "Roi noir"}
>>> echiquier[(0, 0)] = None
>>> echiquier[(0, 1)] = "Roi blanc"
>>> echiquier
{(0, 0): None, (5, 1): 'Roi noir', (0, 1): 'Roi blanc'}
Exercices
QCM
On considère le dictionnaire ci-dessous décrivant une liste de courses :
🐍 Script Pythoncourses = {
"pommes": 1.5,
"huile": "une bouteille d'huile d'olive",
"légumes" : {"poireaux": (1, "kg"), "potimarron": (5, "unité")}
}
Cochez la ou les bonnes réponses :
Départements
On fournit ci-dessous le dictionnaire dont les clés sont les noms des départements français et les valeurs, la superficie en km² de chacun d'eux.
🐍 Script Pythondepartements = {
"Ain": 5762,
"Aisne": 7362,
...
"Guyane": 83534,
"La Réunion": 2504,
}
Ces valeurs sont déjà chargées en mémoire et n'apparaissent donc pas dans l'éditeur.
Il est possible de parcourir les dictionnaires afin de créer des listes en compréhension. Par exemple [departements[nom] for nom in departements]
renvoie la liste contenant la surface de chaque département.
Compléter le code ci-dessous afin d'effectuer les requêtes demandées. L'ordre des résultat au sein de chaque liste n'est pas important.
# --- HDR ---#bksl-nldepartements = {bksl-nl "Ain": 5762,bksl-nl "Aisne": 7362,bksl-nl "Allier": 7340,bksl-nl "Alpes-de-Haute-Provence": 6925,bksl-nl "Hautes-Alpes": 5549,bksl-nl "Alpes-Maritimes": 4299,bksl-nl "Ardèche": 5529,bksl-nl "Ardennes": 5229,bksl-nl "Ariège": 4890,bksl-nl "Aube": 6004,bksl-nl "Aude": 6139,bksl-nl "Aveyron": 8735,bksl-nl "Bouches-du-Rhône": 5088,bksl-nl "Calvados": 5548,bksl-nl "Cantal": 5726,bksl-nl "Charente": 5956,bksl-nl "Charente-Maritime": 6864,bksl-nl "Cher": 7235,bksl-nl "Corrèze": 5857,bksl-nl "Corse 8": 680,bksl-nl "Côte-d'Or": 8763,bksl-nl "Côtes-d'Armor": 6878,bksl-nl "Creuse": 5565,bksl-nl "Dordogne": 9060,bksl-nl "Doubs": 5233,bksl-nl "Drôme": 6530,bksl-nl "Eure": 6040,bksl-nl "Eure-et-Loir": 5880,bksl-nl "Finistère": 6733,bksl-nl "Gard": 5853,bksl-nl "Haute-Garonne": 6309,bksl-nl "Gers": 6291,bksl-nl "Gironde": 9976,bksl-nl "Hérault": 6101,bksl-nl "Ille-et-Vilaine": 6775,bksl-nl "Indre": 6791,bksl-nl "Indre-et-Loire": 6127,bksl-nl "Isère": 7432,bksl-nl "Jura": 4999,bksl-nl "Landes": 9243,bksl-nl "Loir-et-Cher": 6343,bksl-nl "Loire": 4781,bksl-nl "Haute-Loire": 4977,bksl-nl "Loire-Atlantique": 6809,bksl-nl "Loiret": 6775,bksl-nl "Lot": 5217,bksl-nl "Lot-et-Garonne": 5361,bksl-nl "Lozère": 5167,bksl-nl "Maine-et-Loire": 7172,bksl-nl "Manche": 5938,bksl-nl "Marne": 8169,bksl-nl "Haute-Marne": 6211,bksl-nl "Mayenne": 5175,bksl-nl "Meurthe-et-Moselle": 5246,bksl-nl "Meuse": 6211,bksl-nl "Morbihan": 6823,bksl-nl "Moselle": 6216,bksl-nl "Nièvre": 6817,bksl-nl "Nord": 5743,bksl-nl "Oise": 5860,bksl-nl "Orne": 6103,bksl-nl "Pas-de-Calais": 6671,bksl-nl "Puy-de-Dôme": 7970,bksl-nl "Pyrénées-Atlantiques": 7645,bksl-nl "Hautes-Pyrénées": 4464,bksl-nl "Pyrénées-Orientales": 4116,bksl-nl "Bas-Rhin": 4755,bksl-nl "Haut-Rhin": 3525,bksl-nl "Rhône": 3249,bksl-nl "Haute-Saône": 5360,bksl-nl "Saône-et-Loire": 8575,bksl-nl "Sarthe": 6206,bksl-nl "Savoie": 6028,bksl-nl "Haute-Savoie": 4388,bksl-nl "Paris": 105,bksl-nl "Seine-Maritime": 6278,bksl-nl "Seine-et-Marne": 5915,bksl-nl "Yvelines": 2284,bksl-nl "Deux-Sèvres": 5999,bksl-nl "Somme": 6170,bksl-nl "Tarn": 5758,bksl-nl "Tarn-et-Garonne": 3718,bksl-nl "Var": 5973,bksl-nl "Vaucluse": 3567,bksl-nl "Vendée": 6720,bksl-nl "Vienne": 6990,bksl-nl "Haute-Vienne": 5520,bksl-nl "Vosges": 5874,bksl-nl "Yonne": 7427,bksl-nl "Territoire de Belfort": 609,bksl-nl "Essonne": 1804,bksl-nl "Hauts-de-Seine": 176,bksl-nl "Seine-Saint-Denis": 236,bksl-nl "Val-de-Marne": 245,bksl-nl "Val-d'Oise": 1246,bksl-nl "Guadeloupe": 1628,bksl-nl "Martinique": 1128,bksl-nl "Guyane": 83534,bksl-nl "La Réunion": 2504,bksl-nl}bksl-nl# --- HDR ---#bksl-nl# listepy-und1 contient tous les noms des départementsbksl-nllistepy-und1 = ...bksl-nlbksl-nl# listepy-und2 contient toutes les surfaces des départementsbksl-nllistepy-und2 = ...bksl-nlbksl-nl# listepy-und3 contient les noms des départementsbksl-nl# strictement mesurant moins de 1000 km²bksl-nllistepy-und3 = ...bksl-nlbksl-nl# listepy-und4 contient les surfaces des départementsbksl-nl# dont le nom contient la chaîne "Seine"bksl-nllistepy-und4 = ...bksl-nlbksl-nl# listepy-und5 contient les noms des départementsbksl-nl# dont le nom débute par un "S"bksl-nl# et la surface est comprise entre 5 000 et 7 000 km²bksl-nllistepy-und5 = ...bksl-nlbksl-nl# listepy-und1 contient tous les noms des départementsbksl-nllistepy-und1 = [nom for nom in departements]bksl-nlbksl-nl# listepy-und2 contient toutes les surfaces des départementsbksl-nllistepy-und2 = [departements[nom] for nom in departements]bksl-nlbksl-nl# listepy-und3 contient les noms des départements bksl-nl# strictement mesurant moins de 1000 km²bksl-nllistepy-und3 = [nom for nom in departements if departements[nom] < 1000]bksl-nlbksl-nl# listepy-und4 contient les surfaces des départementsbksl-nl# dont le nom contient la chaîne "Seine"bksl-nllistepy-und4 = [departements[nom] for nom in departements if "Seine" in nom]bksl-nlbksl-nl# listepy-und5 contient les noms des départementsbksl-nl# dont le nom débute par un "S"bksl-nl# et la surface est comprise entre 5 000 et 7 000 km²bksl-nllistepy-und5 = [nom for nom in departements if nom[0] == "S" and 5000 <= departements[nom] <= 7000]bksl-nl
A
Z