Aller au contenu

🏁 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 :

naissances= {
    "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 :
vide = { }
  • Création d'un dictionnaire « à la main » :
animal = {"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 :

>>> 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 :
>>> 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 :

courses = {
    "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 :

  • Le dictionnaire courses contient cinq couples (clé: valeur)
  • "huile" est une clé
  • "légumes" est une valeur
  • courses[1.5] vaut "pommes"
  • On accède à la quantité de poireaux en faisant courses["poireaux"][0]
  • ❌ Le dictionnaire courses ne contient que trois clés : "pommes", "huile" et "légumes"
  • ✅ "huile" est une clé
  • ❌ "légumes" est une clé
  • ❌ courses[1.5] lève une erreur car 1.5 n'est pas une clé
  • ❌ On accède à la quantité de poireaux en faisant courses["légumes"]["poireaux"][0]
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.

departements = {
    "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.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013f]gSa²3/9mocbPérhd_wi;tsy254e7k8î [n6=puv10l050s0D0x0f0v0S0y0I0m0S0f0y0y0M010x0v0N010406050y0O0k0k0f0q0z040e0l0S0O0-0l0K050i0@0_0{0}0=0N04161d051g0i1g1i1d0=0s0v0P0#0%0)0+0r0v0d0r0S1w0r0x0:050W0n0S0D1r0(0*011v1x1z1x0x1F1H1D0x0n0l0s0}1E0q1e0x0r0#100y0N0f0K0+0A011J1t010b0Y0D0K0f0k0D1D1+1-1=1L1^1H1{1}0:0a0I0o0q0l0N0l0y0v130K0I0U1)0q0q0D0m2i16200K1e0i1%2v0x1#1!1$0s220+1z0K1`2f1D1o1q0$1K2F0v2H0K1X1p1D0N2o1e2t2v2Z0?1,2j2N1?2S0q0`0S0:0I0Q2s2%0;2$212)1L2+2-2/0A2=1-2@2t2E012|0f2.040I0h302u0=332`0+36380I0C3c322%343i2/0B3m3e3o3g350l2,372/0L3t2^2(1s2{3y2}390E3D3f3G3h3I3A390G3M3v3O3x3z3j0j3U2_3W3q040Q0R3#3F2O3X3J0Q2;172?3u3$3.3(0Q2 3?313^3-2*3Q380Q3b3~3d3E3p430:0Q3l473n3_423Y4c3s4f404a4j3)3C4m493w3{3L4s3N3`4b3)3T4f1f2X162L2y0s2C340m1X1~1e4H1h4F2#4D4M0U2Y3V3.0m0Q0:030I1z0y0x0D0t0Q1)0K0-1`0x0I0x0l0O0!1H0!2S0k0!0U500p1,0q4+1}4:0y3,3p0:4)4+4-3m0I4t3W0l0:0M5g5i3.0/040J3m5o2*0:4~5n4y1?0F0:0b3y5y4Y5v045x4f5h5z1L0l0u0:2Q5F4h2{0:0U54564=594D5M0+5q0c3t4n3w4!4$4(0v4*4,0A4/4;4:4@4_4+4{0D0!0@0q0b0f0m5~2k650s530{5Y585a4u5c5:5e3}2Z5L5G5N5l5S411L5q5s5#6l3h5V0D5X0D570x5!2#5$016r5t6E0K5w0l0k6H6u6F0:5)5K5u1L5B045D0q6o5b5I6L6Z3w5O5Q156S6I6w6y6A6C2?6T5%6Q5*6?015-044%5d4,0h5@0v4=4(654~506769556z5Z5h4x6O6|4%4*0q0v2q7c5_1}601-4?0k0l2Q782:0R7y0I0F0k0g6d3%6f5;0t466j6`5k045m6,6O6G6t5T6v6#6M7P7T016V6X6%7F7V7$3.6)045R7X6p7U5W6a7n6B7)5A5Q0b7^5U047;7b6:6N7Y7R6D6O6J7(7S7/6P046R7K6E7M020S0x0w7|0+0k0v4c7y3+89345(6_6E7h5/7H0C72744|0I60626478526/5Z7E4Z4#6}2k144?1H0I4~8B5_0%0#0r0f0H2H0I010e0D2Q1~8M5H6 0t4e8e6O7M7O8?830:6s857Y877 6b7@8s3w846=6-888~8a8u7.347!5E9d6e992?6k7Y7+7-8`8a906x7=819h3W6V0v7{9v3.0y1:048)8+2H018l019n6+9p6!5J9a8t6^4m5+3W8x8:0B8W8S766L8I2k7a926;3 6`8x0s8R758U6L9(0n121I540I0O2j8)9I7f7Y8x0V4(0f8E0O61631I5~4?4M0k2W5:ab4:2o0I9Y8q0Ia40E0Ian7B7Da19q7G5e4l9N6(6n9A1?96316`879P9k6`9f6YaD7}aJ319l8a9L9J9r8K6caO0+9x9zaA7%aQ2u6`aFa*6E8n0:8r9Q959Sa%7*5l8_aK6E9C0:9 9J7+1-0s9Ja/040B8qb10:8h8ja{aRaH6.9t8L943Wa,4X8 6K7Wa=bla@a|8@bb8i0wbe2uaS34b60Eb9bk5pbt9,0i4V0D2v2WbM4G1p4I2y2A2w1W1Y2y0f1GbP0i4H0=b$0V0X0Z04.