Aller au contenu

Les dictionnaires Python

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'}
Suppression d'un couple Clé :valeur
  • On peut supprimer une clĂ© et sa valeur avec del :
>>> mon_dictionnaire = { "nom": "Dupont", "prénom": "Jean","age": 30 }
>>> del mon_dictionnaire["prénom"]
>>> mon_dictionnaire
{'nom': 'Dupont', 'age': 30}
  • Si la clĂ© n'existe pas dans le dictionnaire, une KeyError sera levĂ©e. Pour Ă©viter cela, on peut utiliser la mĂ©thode pop() avec un argument optionnel pour retourner la valeur par dĂ©faut en cas d'absence de la clĂ©.
>>> valeur_supprimee = mon_dictionnaire.pop("prénom", None)

Dans cet exemple, valeur_supprimee contiendra la valeur de la clé "prénom" si elle existe, sinon None.

Exercices

Activité 1 - 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]
Activité 2 - 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)
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

.128013rt=7flb1 2e/vyg]8sÂČw9nuph5aSo3qk_iĂź46P;Ă©[cdm0050R0l0c0B0I0g0s0j0Q0g0B0s0s0d010c0I0y010406050s0x0S0S0B0b0o040C0D0g0x0.0D0w050m0^0`0|0~0?0y04051e171h0m1e0?0R0I0n0$0(0*0,0z0I0p0z0g1v0z0c0;050X0h0g0l1q0)0+011u1w1y1w0c1E1G1C0c0b1f0c0z0$110s0y0B0w0,0k011I1s010f0Z0l0w0B0S0l1C1#1%1,1K1/1G1=1@0;0a0j0M0b0D0y0D0s0I140w0j0V1Z0b0b0l0Q2c171`0w1f0m1X2p1U1W1V1D0R1|0,1y0w1;291C1n1p0%1J2z0I2B0w0D2F1C0y2i1f2n2p2T0@1$2d2H1-2M0b0{0g0;0j0i2m2X0=2W1{2Z1K2#2%2)0k2,1%2.2n2y012?0B2(040j0E2`2o0?2}2;0,30320j0K362|2X2~3c2)0A3g383i3a2 0D2$312)0L3n2/2Y1r2=3s2@330e3x393A3b3C3u330r3G3p3I3r3t3d0v3O2:3Q3k040i0T3V3z2I3R3D0i2+182-3o3W3(3Y0i2_3-2{3/3%2!3K320i353^373y3j3}0;0i3f413h3:3|3S463m493`444d3Z3w4g433q3=3F4m3H3;453Z3N491i2R172F2s0R1W2x3q0Q2N1^1f4B1g4z2V4x4H0V2S3P3(0Q0i0;030j1y0s0c0l0H0i1Z0w0.1;0c0j0c0D0x0#1G0#2M0S0#0V4{0O1$0b4$1@4+0s3$3j0;4!4$4(3g0j4n3Q0D0;0d5b5d3(0:040P3g5j2!0;4_5i4s1-0G0;0f3s5t4T5q045s495c5u1K0D0u0;2K5A4b2=0;0V4 514-544x5H0,5l0q3n4h4G4W044Y584%0k4*4,4+4/4;4$4?0l0#0^0b0f0B0Q5^2e5 0R4~0|5T53554o570I4#5,5N3{5I5g6d2~5l5n5W5B5P045R640l520c5V2V5X016j5o6w0w5r0D0S6z6m5Y0;5!5F5p1K5w045y0b6h685D6D6R5e5K045M6K6A5Q0l5S6r5U6F5O6H046J2T065$3Q4V4X4Z6a590E5.0I4-4Z5 4_4{6163506)535c4r6G016@5)0j4#0b0I2k774.1@5`1%7l0D2K732*0T7u0j0G0S0t673X696b0H402T5G7b5f045h6!7b6y6l6,2 6C6E7M7Q6N6P6V3;7S7Y1-5J5L167U6e3b6$6(6s6u2-7H7V5L0f7#6n6p767/6+7+6x0;6k6v7b6B6T7T837Q5Z7_0,7J020g0c0N8b010S0I467u3#7P7 8a4g6=4U5(5*6`4%0K6}6 4@7f0x5{5}61747.6*7a7Q7d4Y0R154.1G0j4_8A5:0(0$0z0B0J2B0j020F0x0D8g0C0l2K0l8(8*8g7A7Z045+0H487G6L8c6g7*6i817~566o6%6q7}8p925m946S5E888q6I8i7W5z919e6U9m6W7(8i857{656t9j7@8i0s1*048;8+0N8-8/9D8?9p3(7%6Y7)8}6#869d3Q8r6:8t1-8N6_7D0A8V8R716D734}8J668L7 9Y8P8W1H8U620h131H4 0j0x2d9I9Fa08@9X8v0j0W4Z0B8D8F5~a64#1Z0S2Q6a1H4-2i0j9#8na64.0e0jao7x7z9.958`4f9P7I90aA89939a6S9u7k7:2{8~809caG7B9RaP5k9i9K5v5x9laD7 859f7;aM9M6ZaZ95aI99a+3q6N0I7^aV6na$aL6w7O9g2~8k0;8oa}3q9Ua%6w7J0d7La/3Q9A0;a00Ca2a@8c6X1%0R8ia 040A8n8i8d8f0Nb9b5847-988Kb29TaFbB8^a_2oaMb42{7=7 bs8gbvbKaMbn0ebqaS1-bJ420m4Q0l2p2Qb#4A1o4C2s2v2q0B1Fb(0m4B0?b=0W0Y0!04.