Aller au contenu

Chapitre 5.2 - Les Requêtes⚓︎

1. Requêtes simples⚓︎

1.1 🦝 Les prénoms donnés en France⚓︎

On s'intéresse au fichier nat2021.csv regroupant des informations sur les prénoms donnés en France de 1900 à 2021. Ce fichier provient du site de l'INSEE.

Fichier volumineux

Le fichier initial comporte 648 616 lignes !

À vrai dire, il est si long que le moteur permettant de faire fonctionner ce site mettrait beaucoup trop de temps à le lire en entier...

On a donc limité le fichier original aux seules années postérieures à l'an 2000 (inclus).

Même allégé, on déconseille vivement d'afficher la totalité du tableau avec Python...

Les premières lignes de ce fichier sont :

📑 Données CSV
sexe;prenom;annee;nombre
G;PRENOMS_RARES;2000;12583
G;PRENOMS_RARES;2001;13285

Remarques

PRENOMS_RARES correspond à des prénoms donnés moins de 20 fois entre 1900 et 1945 ou entre 1946 et 2021. Tous ces prénoms sont regroupés pour chaque année. On doit donc comprendre qu'en 2000, 12 583 garçons ont reçu un « prénom rare ».

On remarquera de plus que tous les prénoms sont saisis en majuscule (avec potentiellement des accents comme dans LÉONIE).

Repérer les bonnes informations

Observez l'extrait proposé et répondez aux questions suivantes :

  1. Quel est le séparateur utilisé ?
  2. Combien y-a-t-il de descripteurs ?
  3. Quels sont les types des descripteurs ? (entier, nombre décimal, chaîne de caractères...)
Solution
  1. Le séparateur est le point virgule
  2. Il y a quatre descripteurs
  3. sexe et prenom sont des chaînes de caractères, annee et nombre des entiers.

A. Import(s)

On laisse ici le choix d'importer ce fichier sous forme d'une liste de listes ou d'une liste de dictionnaires. Vous pouvez aussi vous entraîner en réalisant les deux types d'imports !

Quel que soit le choix fait, la liste regroupant l'ensemble des entrées sera nommée prenoms et les données seront typées.

On rappelle que la structure du fichier est la suivante :

Descripteur sexe prenom annee nombre
Indice 0 1 2 3
Type Python str str int int
Import dans une liste de listes

Compléter le script ci-dessous afin d'importer les données dans une liste de listes.

Les données seront typées.

Il y a beaucoup de données : le script met un peu de temps à s'exécuter

###(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

.1280134r[S=0y9kP)_5(gf8l6umpinh17;ec./]2d3, b-owt:vas050J0D0R0U0x0s0V0M0E0s0U0V0V0f010R0x0w010406050V0u0v0v0U0c0h040e0P0s0u0:0P0y050G0`0|0~100^0w04051g191j0G1g0^0J0x0T0(0*0,0.0*0y0p0u0U0p0D0O0w0h0R0z170M0z0x0p0z0s1L0z0R0?050Z0N0s0D1s0+0-011K1M1O1M0R1U1W1S0R0c1h1G0(130V0w0U0y0.0I011Y1u010q0#0D0y0U0v0D1S1@1_1~1!211W24260?0a0M0k0c0P0w0P0V0x160y0M0X1=0c0c0D0E2r19290y1h0G1G2E1.1:1/1T0J2b1v0x0y232o1S1p1r0)1Z2O2Q0y0P2U1S0w2x1h2C2E2+0_1^2s2W1 2!0c0}0s1S0U1J2x0q0.030m0m0E2#0D1O2Z0P0O0A390?0A190U2,2/0@2.2a2;1!2?2^2`2|0D2~01303234362R390O1|040I3e3g1_3i2C2N013n0U2_1h2{0z2}2 31330X3x2!3z0K0?0K3E2B3h0^3I3l0.3L3N053P3R3t3T3w2P3y3a0b0?0b3$1a3(3j2:1t3m0P2@3M3p3Q3r3S3v3V3^3X3a0n0?0n3~2+3)2/3J3-483;3u3U354e383a0t0?0t4k403*433,453o3O3q3s4s3@373z0B0?0B4B3G4m3k4E3K4G474I494K3?4d4N3a0r0?0r4S2D4U422X4X463.3:4a3=4c4u4)0O0i0?0i4.2E2(0D2E2U2H0J1:2M3+014t2T1q1h552*3h3%3G054t5k2a0x0J0.312C3z0A3p5s5u4|3W4w3b0M2f0D5B4t5D5x1S0G3f414o0?552!0v0V5m2D0M5Q5d0P0?0f5X045Z4D4=0=040d0H5)0^3 5n3I5A015v2/3z3B3/0M5`4%4}3_3A1}5H5J4M655 5O5q4;1 0j0?0Q2q0z5)5+4n5d0y0N0?2m235)5!4W5.0o6v5,2=0?2d0D6A6o4W5$045(5@2D6w4=0V3B3K0U0R0I0g0I0A0F0E0V0T016G4V5-0?0L6m6O6C040v346(6f1!6J6L2-6B1!6Q0?010c6%6M6e3J5.6,736n6)6/233U2P0p6?3J6_7g5d6~0401150q0O4+7j6x0?0l6-6|0.6h040+7w6H4=0y6D0x0E1K0D0c7s6*040S5=7g620m5w3a3Z4I7S5K4v3Y67255I5{5C7!7V5N3f0M7/796@3,7G7I0x7K7M1 6J0F7{3m0?2x0U0J3x7 0.6y7v735?6{4n7S7U0O3{7X5t7)7Z4~3{5G7%694(658h3E7:7;3J7z0q457C7a80041(2Q8B7=010P0Q0?2P8H5R04217^7`736.1!5.7P8a7R8j5|1_3z4h8i8q644f0O4h8o268+5L4g7-5*8v7:8V7?8E1L2Q0m2(2m2x8O5#5%954W7F8~0p8G8U7x8J0?7~9e7D6/0V1.0;8601887Q9j5r8#7T5}4x5z9v8l654y8:7(638?0O4y2E7.8`7/8|3K0?0T3M0D0u0c5W789O7i9X9f9a8F0D912l559p7}9p9a1@1O0R9p6y9p7l010C728c8C877u9s9}2s8e9x0O4P8*8k6a8-4P9E8=7+a68^9M9N9#9Q9S9U9Wa2750?0d9p0v0x0?3D9t8I5.5;9!9k6^97aC9~3K6r042P9=ayaq046zaN6pal1Wan9?aratav3CaW040H894l8!5B8f4+a89Gaf4+ada98r8-a-8uai9O9a9RaU9Va#asaR4Wau3!a#aB2+8w966K987EaJaLa#aQapaS04a~9Tb0b37Nb2bjb4aZ3#bp1 aAa(40aNa48%3a50a.7*4~50a=a/bIaha{ak045T0P5V9,9h9.0?0U0w0w230JbhbWblambobs7Nbz4T6v0G5p1k2)1958190R5ab`2K2F0U1V56b^5h5?0X0Z0#0V04.
Import dans une liste de dictionnaires

Compléter le script ci-dessous afin d'importer les données dans une liste de dictionnaires.

Les données seront typées.

Il y a beaucoup de données : le script met un peu de temps à s'exécuter

###(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

.1280134r[S=0ykP)_5(gf8l6umpinh17;ec./]D2d3,R b-owt:vas050J0C0S0V0w0r0W0N0D0r0V0W0W0f010S0w0v010406050W0t0u0u0V0c0h040e0Q0r0t0;0Q0x050F0{0}0 110_0v04051h1a1k0F1h0_0J0w0U0)0+0-0/0+0x0o0t0V0o0C0P0v0h0S0y180N0y0w0o0y0r1M0y0S0@050!0O0r0C1t0,0.011L1N1P1N0S1V1X1T0S0c1i1H0)140W0v0V0x0/0I011Z1v010p0$0C0x0V0u0C1T1^1`1 1#221X25270@0a0N0j0c0Q0v0Q0W0w170x0N0Y1?0c0c0C0D2s1a2a0x1i0F1H2F1/1;1:1U0J2c1w0w0x242p1T1q1s0*1!2P2R0x0Q2V1T0v2y1i2D2F2,0`1_2t2X202#0c0~0r1T0V1K2y0p0/030l0l0D2$0C1P2!0Q0P0I0P0z0@0z1a0V2-2:0^2/2b2=1#2@2_2{2}0C2 01313335372S3a3a0@0I3g3i1`3k2D2O013p0V2`1i2|0y2~3032340Y3z2#3B0K0@0K3F2C3j0_3J3n0/3M3O053Q3S3v3U3y2Q3A3b0b0@0b3%1b3)3l2;1u3o0Q2^3N3r3R3t3T3x3W3_3Y3b0m0@0m3 2,3*2:3K3.493=3w3V364f393b0s0@0s4l413+443-463q3P3s3u4t3^383B0A0@0A4C3H4n3m4F3L4H484J4a4L3@4e4O3b0q0@0q4T2E1l2*1a2V2I0J1;2N3,014u2U1r1i2)0C2+3j3(3H054u542b0w0J0/322D3B3d4J5c5e4d4v4*3c1~2g0C5l4u3X4x5p2F3h423K0i0x0@0w0u2o0c0S564:4E2Y010R0@0N5K5a435N0x5D040D0W0U5S0_40573J5k015f2:3B1}5j5d5,5m5v5/5q265s5?5u4w5_5y5T4p0@522#0u0W5S5R5M200Q0@0f695A4|0?040d0G5$5S5A5+5-1`3Z3r6q5@5 3b3!0N5r5t4N3`0P3!616h4X0i0@0R2r0y6g6b3o0O0@2n246o6Q0/6j0n6W4o4|5X2e0C6#4W5N6d046f5(5L6$4X0W5:3L0V0S0I0g0I0z0E5Z0U016+5U206j0L6P6?5V0@0u35753K6.6:2.6X016^0@010c746;626i0@797s6a7b2?0@243V2Q0o7g4|7i7G6@6_160p0P4,7J5N6j0k7a6,206K040,7U763o0@220D1L0C0c7Q770@0T6n7s6p5=6r0x3B3|5;6C4)6E3|6A5{7}5n7 1T0F3h0N897y7V7$041X2A0C0t7,7x6I6-6e7!635Y5!7-1#6.0E8s3-0@0H0w2A0M0C0V0Y8j7k7z1#6Z8w3L7%8A7*8G557l788o6%0@4e0u2r7+8L7I7=7l7n04010B7r8H8c6Y0@7T7s5%8.2t6v5g4h6u7@6w5o4i8127835^8|618a8b7#0/7X0p468U4X5X241/0C6*8k7l0Q5P042Q9f7c8e2z0S8h8Q5)8I8:047:8?7g8`5.4y8}946x0P4z925|4(844g9M8688988a8l7A049i2y9l8^3K6j0d8L8)011`2R288L6j6m9m9A018$2,994p6S9q0x5J8%9_8Ka38/8M9!a19$9=0@9+a69a7m6_9/9k8-8Ra40@0G8=4m9F8~8{0P4Q7|5}6D9S4Q9O9K5oaw3F9W9X7l9haa9kac6k9,6_660O2yal9za79?9s6c8n9^a70x9 2Qa29(7u046!af8p9#aMa/a,aea+7K7oaRaTaNap7;9(9G6s4+9Jay7~9S4,aCb69R5w4,97aH9}8V04650Q678#0@8va?9g0@0V0v0v240JaNa.a_9ta;9%amaW8;b0550F594;534?501a0S4_bP2L2G0V1WbM0F4@5%0Y0!0$0W04.

B. Requêtes

Dans ce qui suit, les imports ont été effectués et la liste prenoms est chargée en mémoire. On peut désormais l'interroger afin d'en extraire des résultats.

On propose ci-dessous deux versions du même exercice selon le type de listes choisis : liste de listes ou de dictionnaires.

Requêtes dans une liste de listes

La première entrée de la liste est :

Python Console Session
>>> prenoms[0]
['G', 'PRENOMS_RARES', 2000, 12583]

On peut sélectionner les entrées correspondant au prénom ADELINE en faisant :

Python
adeline = [entree for entree in prenoms if entree[1] == "ADELINE"]

Vous remarquerez que les prénoms sont saisis en majuscule dans le fichier csv.

On peut de la même façon sélectionner les entrées correspondant au prénom "ANTOINE en 2007 :

Python
antoine_2007 = [entree for entree in prenoms if entree[1] == "ANTOINE" and entree[2] == 2007]

Compléter le script ci-dessous afin d'effectuer les requêtes demandées. prenoms a déjà été chargé et correctement typé sous forme d'une liste de listes.

Il y a beaucoup de données : le script met un peu de temps à s'exécuter

###(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

.128013ANé4r[S=0y9kP)_5(Ogfà8l6umpinh17I;eEc/C]FD2d3 b-owtvasL050S0J0Z0#0C0x0$0U0L0x0#0$0$0i010Z0C0B010406050$0z0A0A0#0f0k040h0X0x0z0{0X0D050M12141618100B04051o1h1r0M1o100S0C0!0:0=0@0_0=0D0t0z0#0t0J0W0B0k0Z0E1f0U0E0C0t0E0x1T0E0Z0~050+0V0x0J1A0?0^011S1U1W1U0Z1$1(1!0Z0f1p1O0:1b0$0B0#0D0_0R011*1C010u0-0J0D0#0A0J1!1 21261,291(2c2e0~0a0U0n0f0X0B0X0$0C1e0D0U0)1}0f0f0J0L2z1h2h0D1p0M1O2M1_1{1`1#0S2j1D0C0D2b2w1!1x1z0;1+2W2Y0D0X2$1!0B2F1p2K2M2?11202A2(272,0f150x1!0#1R2F0u0_030p0p0L2-0J1W2+0X0W0y0W0F0~0U0F1h0#2@2`0 2_2i2|1,2~3032340J3601383a3c3e2Z3h0W24040U0R3o3q213s2K2V013x0#311p330E3537393b0)3H2,3J0T3l0T3P2J3r103T3v0_3W3Y053!3$3D3(3G2X3I3i0e3l0e3;1i3?3t2{1B3w0X2 3X3z3#3B3%3F3*433,3i0q3l0q492?3@2`3U3{4j3 3E3)3d4p3g3i0y3l0y4v4b3^4e3`4g3y3Z3A3C4D423f3J0G3l0G4M3R4x3u4P3V4R4i4T4k4V414o4Y3i0w3l0w4%2L4)4d2)4,4h3|3~4l404n4F4@0W0l3l0l4|3S4y3_514S3}4U4m4E3+4H3j0j0~0F0j5e4~4z4-535l565n4G3J0F3k045F5v4c5x524B554W4?443j3L0F3O0M3p3=4(5K5h4A4/4C4=585R0F3.5H3:5W3Q4}5!4+5$5k4:5m4X5+465H485:5Y5=4O505^544;575o5E4s5H4u614a5Z642}5y5N685C590F4J5H4L6f4w5?656k5%5O5)6a3i0F4!5H4$6t4N5g5@6x5_5(695D6C4_5H4{6H6h6J6w5M6y6m5|4q3j5b5H5d6U636W6j6Y6M6z6O590R5r046@5J6i4f6/675{5Q6$0R5G736{6-6}5j6 5B6#5p0R3L7e764*6X795A5P5*725-0R5/5X6g6,7i6.7k5`7b717d5~0R607s6u6|4Q6~7l6A6P3K6c0R6e7F6I7v784.6:6!7A3J0R6q7!7h4 7w7V7a7m6B3K6E0R6G7R6V7T7I7x6N6n5R0R6R7}7%5L7_6;7{726(0R6*7=7u7(7U5z7y7,7M0T6^8h805#6L7+7L590T5G8q8k6K7J8e8o5R0T3L8z8t7j7*7K6=8y5-0T7r5;5f7@5i8E8w8G6$0T5~8T8C7)8d7`7c3-6c0T7Q8L5w8l8v8Z7Y3i0T6q8:8W8c6l707n5p0T6E8|8?7^8P8-8`3-6R0T6T898M8b908Y838!8/6(0T888L1s2;1h2$2P0S1{2U5h4E2#1y1p2:0J2=3r621p4E9z2i0C0S0_392K5E3z9G9I8R5p3k0U2n0J9O849Q1!617H010L5G030U0#5Q0U0J0$0Z0U0=9:0C9.1)2C0Z0X1d9-9:9}2b1_0d9}3b2E9-2v0D0S219/0#0z0U2:0d2,0A0U010b5Q019B107t9E2A9N019J2`7Z9M9Hau9Pax9S2d9UaA9Wax2M5X9!0D0~9*5*9B0U6v270X0~0iaQaS1,0}040g9BaY3`0~a02F0JaX9!0m0~0u4ga.77a)04a+0Ja-aqaR9!0X0Y0~2Xa@8NaM049xah0$b59a01a:040C0ubc4za*0D1_a|a%9!a!a$aqa(010A0C5sbpa^01a!0Obj5haU040iaWa~bu0$3Lak0Q0K0%0H0c0Kanbtbq0~bDaqap2^3Tatav213-ay9V9e0W3.aD2eb-8.b/9Y3pb#9Ab%azb)0D3J5~5kb(aB45259Tb?93c6aJar3U9$0~9(212Y0J0p6@0j0G9,9.9:331W9@2B1)9`9|0/1(0/a+a20/a42F1 1fa9bm0U0v9:00cia23N0jcnaobz9Fb~0p9K4rb,aGb.4sb;aF8x6$6c3;aLaN0Dc;ckcm6G2?a bAbGbJc_bubrcVbdb7a{a}c~a/a;a?bKc/a`bma,bE4+b1b31gdabAb7b90X0Abbdk8Nbfbhdf65blbnd5b|bAd0bWbAbw0~5Vb$dBbYdvaTaVc}3rc`8NdF6_cSc^dA8NbCcUdDcW9OcZ3hc#c+5p4Jc)c97-6q3Pb{3R5Kc4d%6Ec3cXaH3i4!d-c$b@d`9ZbAcf049(2lcAcp9/9;ct0Z9^cw9{efcz9 ddcD2DcGa7cJ9/cM0)0/afba0U0u0dbw0D2Xdq6ud!ascXd%6Rd{d.7M4_e0d*3JeKe4b6a;0-cAdL1,c|eY0_dCdIeUdcdye#bed80fe,d3ddbodrbddhbgdjd6dl0~dndpe,dtbie@bke*deeG3Ue%dWbddS5uf85hdYf4bFdNe,bM0~010PbVe(bdfheFfr0Ud^aw3i6(eLe1ca5ac7aEeM59fA5:d=2Ld@eIfy5qd)c5fQePfS5tb_cd9s9%1}0z0f0ZcBcqed9?efcv0Ucxej9~cBema34gepcIaadZfvfxb*6C5GfBeQg1fFb=fC7-5FfXbue69(et9}ewdocE9{f%0/0r0T9~1=cG0U9{0U0A0XeD0of}fbfwfOg05SfRd}gEfUgG5Ugbdb3bf$f(e,e!fi4+fad?dbd4f1e.e:dxf7e|8Ne_b4gSdwb82FbagYbgf3g%d20V0~2md1f90~0rg{5#g#e?fvfg0~bsh34+dS3nffgTbYgyg+dM04020x0Z0IdO3RdQfcbx045/h750ft4bf8f c06C5-g3fVb:c8g87M5,fXfLcdhy5Ec233c4gJ46gIb.0Fc2eTbdgd9:1f0tf)eccsf,egf/ei9}eacCf^a5cHa8f|b!g{hM6Cc-hPd|hUc(hFg43jc-hXcef!gfev0faggih!1Fgm9.0f0C2H0J2ecK0B1c0/2C5tgpbn0$hefugAh{3jd:h~fH5+d,i2fVd:i6h0040xh#eEdPbugRg?g|a#g 5@h1dzhnbubfa=e/hf3wiXgQb2e`g!g-2Zf0i(0_f2e:g^iL2biVhug}i|2}i*hbi}iUj227h9i aZhdgQ0~020thke,h9feht27hv5ZhxgChz3jd`iChG6od iGgJe3b`h`jo5EeKjsi30FeOjwhUeSaKe5f!eC3b1Bcl0jjGebcr9=cu9_h-ekf?a1h;f`h@bmgzgV4yiz0FfAjEfV5bhTb@j/gLjMcg9)adghai010cij1b0?fqhwf~jB3i6@gFb.kbj@fDkbccgcf!2vf$cNcP1)6@jGj+fMb}d$fP73kcb@kxkf7-kxkidbjOk40$jRkri=01iRiPbXj4jji)f6h2kObAi#d9iSiKgXkLg)e{kVe)e iOiZd7g;i.k#kRe$h5j80_j7j5j904bZkZdgfkkLfm04k10H0N0s0%0b0hk6k-c{i,210Sk:e=iYktdJkQgA5hdSdHlohck}jbbHhm2Lho3UlqjS6Tk=bBdKh_jnkvgD7ekykg24kB7MlLcchKfNlJjp7qlMkChEfGjt7|hBiJ4+hZa{0p0q0p0*0p5t0pbw0x1(jUf+jXehcyf=9,f@gjh=eqh^ixj,d#aAd%7DlYlQhSjIkzhWjL8NhZ0S1f0D0dj#2F0U0q0UcS0j9,9/ismueygw0/120f0U0z2Y9)c;cQ0r2X0;0zcz00mGmwkn1d2Fiwk7iyk97Nmc6?i1l#i37Pj`e)l,l.l:l=l@1(lvlx3Mc k@k{a_k;k)bdkXi%k g,m}ldg(i,g*n2j0i/g/kLi@kLdSl.mulvhihkm@lzk!ljk^lFlnm7hp0~hslsj3k~m~3UbGnkhljghql=nim{nrnzjmk8lV7ZiBgBiD72iFm(fS7!hJjAnOkajrnRl$72jvnVgG7:m+hYf!e9cknHcSl`h)l|h,l~h/m1eoa6f{j*lHnNm9kwjDn%m)jHn+kdjKfYl*i8cviaicdpeyeA2XeDkshLmZ87m#7|j?mfkgfJmin/j|mlmJevipf.myn@a=9?0UmDmFmHko0UmL0DmNivoplUo5gD8hot8S5rlP8p6^c.e}04n;l;0j0pnIn9eZaVe,gUllm,npndgZkLe;e+k$n7k(n5d2e~g.gig:duo j1lEo_oe50fdnqjllyiQl1o=0_l3folcplb0lfa8lip1pem`lEdSnwntiTnLptc{jcjenEnfnGo/o;nxjklGm6o`eHn!b/g2j;gG8qg6c*fSp#lSnZoXjp8zo!8{lOow7-p.kEj{e71}0A2v0$9 f*n_f-jYn|elj$m2j(eroVkup,3-hBpZb.8Jp$nS8{l(ozi7j|i9aeibex3bp|2wmoqaj-mZ8Tp/3-meobb@qAp^mjf!0Nggqrid3bbm0C2b2+9/mR1_0,9/0SmQeC1fqxm8b 8#qB8/m%g7i38%n.f5qtp}9-m?o^pApQkSn4pHdso~po3VpdnAbFp3i.k+pag=r44+pq0Wpsm^pudipxg$q{k?nspUlAnGpjbYpG3slIqc8/nQhQqgnUq-p(iIjzrvq(8/n$rzqFn*rCp!jypg27hZ0#0p0)0V1dn^jWq2l}f;n}q6n h?q9o3mYpW96q*b/oarNqgodkjqoohqqojiq0drW0+bmev16jV1(gq1)akrflTqbrHb/j:o8p(ovqEfD9hq:iKrTrV1dq^kLpfbup0rkp53Un0rjkUsxr5ripcnbp9o}k/sFq}rQk|h6rlbvrqnJbCsOpElphqjisPpkrgpIlwflbN0brfm_lur,d?0M9D9k9y9m9v1h0Z9ps_2S2N0#1%s?0M9nap0)0+0-0$04.
Requêtes dans une liste de dictionnaires

La première entrée de la liste est :

Python Console Session
>>> prenoms[0]
{'sexe': 'G', 'prenom': 'PRENOMS_RARES', 'annee': 2000, 'nombre': 12583}

On peut sélectionner les entrées correspondant au prénom ADELINE en faisant :

Python
adeline = [entree for entree in prenoms if entree["prenom"] == "ADELINE"]

Vous remarquerez que les prénoms sont saisis en majuscule dans le fichier csv.

On peut de la même façon sélectionner les entrées correspondant au prénom "ANTOINE en 2007 :

Python
antoine_2007 = [entree for entree in prenoms if entree["prenom"] == "ANTOINE" and entree["annee"] == 2007]

Compléter le script ci-dessous afin d'effectuer les requêtes demandées. prenoms a déjà été chargé et correctement typé sous forme d'une liste de dictionnaires.

Il y a beaucoup de données : le script met un peu de temps à s'exécuter

###(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

.128013NéS=P)5(Ogfà6pinhI7e/xC]D3 b-ovLA4r[0y9k_8lum1;EcF2dwtas050!0u0$0%0p0R0(0B0X0R0%0(0(0e010$0p0o010406050(0S0T0T0%0J0M040d0E0R0S0|0E0q050v13151719110o04051p1i1s0v1p110!0p0F0;0?0^0`0?0q0k0S0%0k0u0D0o0M0$0r1g0B0r0p0k0r0R1U0r0$0 050,0C0R0u1B0@0_011T1V1X1V0$1%1)1#0$0J1q1P0;1c0(0o0%0q0`0Z011+1D010l0.0u0q0%0T0u1#2022271-2a1)2d2f0 0a0B0f0J0E0o0E0(0p1f0q0B0*1~0J0J0u0X2A1i2i0q1q0v1P2N1`1|1{1$0!2k1E0p0q2c2x1#1y1A0=1,2X2Z0q0E2%1#0o2G1q2L2N2@12212B2)282-0J160R1#0%1S2G0l0`030P0P0X2.0u1X2,0E0D0U0L3i0 0B0U1i0%2^2{102`2j2}1-2 3133350u3701393b3d3f2!3i3k25040B0Z3p3r223t2L2W013y0%321q340r36383a3c0*3I2-3K0D0A3m0A3Q2K3s113U3w0`3X3Z053#3%3E3)3H2Y3J3j0D0I3m0I3?1j3^3u2|1C3x0E303Y3A3$3C3(3G3+453-470h3m0h4c2@3_2{3V3}4m413F3*3e4s3h470n3m0n4y4e3`4h3|4j3z3!3B3D4G443g3.0t3m0t4P3S4A3v4S3W4U4l4W4n4Y434r4#470Q3m0Q4*2M4,4g2*4/4k3~404o424q4I4`3k0N3m0N4 3T4B3{544V3 4X4p4H3,4K3k3j0 3j5h514C4:565o595q4J3.0U0U5v3o0v3q3@4+4f5z554E584Z4_465t3M0U3P5L3R505P5k4D4=4F4^5b5W3i3:040U3=5#5N5%4R535*5n4?5p4!5/0U495=4b5^4d5O5{2~5A5S4@5a5r5G4v5=4x674z5(4.5}576e5E5c3i4M5=4O6l4Q5j6o6c5+5T5-6g470U4%5=4)6y696A5|6C5~5,6f5F6H4|5=4~6M5`6O6b5R6D6r614t5t5e5=5g6Z5i4-6P6%6R6E6T6t0Z0L0 6|5x6n6?5m6q605V6+0D0Z5I0479706a4i6@745D6*5s783M0Z5!5M686!6=6$735C5U5.770Z5;7z7d6#7f7u5 7i767k0Z647K7C7s7E4;6^6)7I3.0Z6i7V7N527t7Q7h7w6G3L6v0Z6x7p6m7e4T7g7v6F6U3L6J0Z6L7-6z7O7:7F6S6s5/0Z6W847Y5Q806_827y6-0Z6/7|6N7~5l7#7=6`5/0A6}048o875)6Q7$7?6t0A7a8y8s6B7;7G7%7@3/3M0A7o5$6;7Z7P5B8E8w8n5;0A5@8g7r8N7 8k8Q8m770A648(8B728!817j3.0A6i8;8+7!8P8.7T470A6v8}8@8O6d757x7k0A6J96908Z8_8a8/8|6W0A6Y8W8M888-9c8{3k0A6-9p5h1t2=1i2%2Q0!1|2V5k4H2$1z1q2;0u2?3s5_1q4H9I2j0p0!0`3a2L5G3A9P9R8$7k5I0B2o0u9X8b9Z1#5^7/010X7a030B0%5V0B0u0(0$0B0?9|0p9`1*2D0$0E1e9_9|a62c1`0ca63c2F9_2w0q0!229{0%0S0B2;0c2-0T0B010H5V019K117q9N2B9W019S2{7U9V9QaD9YaG9#2e9%aJ9)aG2N5M9-0q0 9?5.9K0B71280E0 0eaZa#1-0~040K9Ka+3|0 a92G0ua*9-0O0 0l4ja`7Da=04a@0ua_aza!9-0E0#0 2Yb08iaV049Gaq0(be8Y01a|040p0lbl4Ca?0q1`b5a:9-a-a/aza;010(3M01bi0E0TawbCbz0 0ybs5ka%040ea)b7bDbF0 at0z0W0G0s0b0WbL2_bN04bPazayb,4BaCaE228:aH9(9d9o269$b|9n3/9+3qb;9J3Ub@0P9T47645nc9aQccb aNc1943.cd9,b19.9:9=0q2Z0u0P6|0L0t9^9`9|341Xa02C1*a3a50:1)0:a@ab0:ad2G201gaibv0B0m9|00220qab3O0Lcyaxbyb?aIb^0q3.6icec-aK4uci2fck7(0Dc;cobfaWct2Zcwc(6L2@b8cpbSbVd7bDbAc+d0b3bva^bQ4.boa~0Jdk5|bubwb6dcb9bbbp1hbWaU0 bI0Tbkdzcpbobqdp2~drdjbMcpdedN8ibY0401c!b5b+c7dObOdJ1-dadb3sd88i0T0p6~d5dfbma-b/6mdQaBc?cb3k6vc=c{8G4MaMc`aPb}0Dd}5#c63S5Pc9d{0D6Jd~e4c24%e2aO8R77efc bm9/0 9;2mcLcA9{9}cE0$a1cHa4eAcKa8dicO2EcRagcU9{cX0*0:aobj0B0l0cd,0q2YdEd@b=9Od`aF4{b{ehcle)ekd 6t6W3?dA04eu9_d#0`dae`bH0 bBe#bmbgb4dtd)bDdma dFdgf4e}babcdyducpbgdCeZf6a{bcbrfaf2dLbxd^3VdPf13VdSbE0u0w2gd:fvd!fq3Vd%e}fz0YdXeab-d?4efuece(5de*em7k5ee.e+c|6-3Qe92Mebe%b_6H8pegfX5G6}f!f;f.c4aA3Ver049;3c0S0J0$cMcBey9 eAcG0BcIeEa7cMeHac4jeKcTajc*fSf,c/6H7af:c@5t9!c0f#8G5Hf`bDf}9;eOa6eRbJcPa4g20:0i0Aa71?cR0Ba40B0T0EeY0gglfxfTf-5XfWgs3i25f@g%5Zgze?g0gJfda(e}fwdYfbdiftfh8if8dofH5)fsf53Sd*bmfedxe}fj2Gbje}dHfpg|f20C0 2nfE5ka-0ihl6oh2hp53g@fOcpfzdCfNf*fPgWh04.bS020R0$0Vd(h4bDd,0 5@fxhmfGe!g^d_9Xed5?g$cg5t3:g*h!5:f`f)f{gZgo5tcd34cfe563c_elg+cnaTcpgB9|1g0kg4excDg7eBgaeDa6evcNggaecSahgkb:fEh-6hhZh?4vh%img-h}crgDeQ0JapgGh 1GgK9`0J0p2I0u2fcV0o1d0:2D3jgNbw0(hChThve$hWfU6uilc20Ue1gvf^5te7h|dg0Ri0flhLb9g=hDhte hsdKdhdshda}f9hgbti_dMi~bRdwbdi;i^fki{bphffmfihi04hkfuhR04hojhhqj0g{hUfFa.i@1-hxhbbJhzf{ji0yiQjc8ihF0khIe}hN5=0Ljs0`d=gXjpij6Hefh;c?h(6Ih^e/62eoc5iign5Ge;jTjY770U4|ioiYe;epf|creX3c1Cd4j-ewcC9~cFa2i8eFgeaaicgiifbvjOiShVaJhXf%j*gw6t0UfZi#g+f%j=9Bcralanivaqas0biD1c0@jxh+f+iUg!78f/kgi$kFjXkh83f/ko4.h~2wg1cYc!c$6|j-kahAc,kDh.78gqkHg%79kKkIk+aSjyjmj^ky0(j{6Yj2hEi:k`i=jrjldqjnh32Mh53Vg~h9hrj6d$j4fgjCfrbhjvdDj9dIlab2fcl028hukZdRbGhyjLe~b.g;bThKl4bXbG0b0s0x0j0G0H0djxl5j3d10!l8l2lvlqk:53fzdVfDloa,hSlefIa(lA3NhMd-7b0LkXlZjMl#5Ogmk#7U3Mgrh(7nk,k*l`e8j$l^477ziXe,3Lh$kll|5;e=ires9^g`0P0h0P0+0P3j0Pd,0R1)j}g6k0eCcJgdmgk5gHideLigiRlrkcc.7Uh:0Bh=c27Kl~l|h{lU28h~0!1gc#k42G0B0h0Bc(0L9^9{iMm$eTgU0:130J0B0S2Zcsc#1*0i2Y0=0ScK00m=m(kT1e2GjBl?gYj%m4c;k)l|inmae57Viqg_bwmimk0$mm0Lmo0.1)lyl)lM4.lTbDf3g`l3l*fne@i}l$h1lRll01h7j5k}j7lhi-lBnClknM1-jImjm$lyhGhIntnxl9hQnvi?l:bEbGaq0C2Gjxddl=nQd90 nZhJjHl,mnnXn+jNihl@kdiV7+m6c|o6j/m778i(3to3mHm4jSmKjUnfejnemMj!mR1-h~e^nn0Pm+9_i3j g8k1mwiagfmAk7eMkYh,n83Lj)ojj+7Jj.onob84nheqiscGiuiwdDeTeV2YeYoIkCo4kE8eo78Go-oao8kni)oVmfmUct0ceQiJg9m*c(m,9 0Bm/m;m?kUm_m{iJn55%ofcaiV8oo.8xf?oRc|phk/n$e@nqcvn~c(nsg?n*n(l1lnnT0`l7nInyi`nInKldi.fidBnOljjbpKnij1jpjif0pT4.fz0(fBlYpylpn?nBn^lzfKbGfMfddw22lPpEn%pWk~pVkbfyn-bJn/p#p^p%lxpHn_jFn{nIjIptjKo0p(kBc8oK3/k(oNkL8%gucjqk95gqm1peed8Jpi8ng)pl8Gqupo9-h~3c0T2wpZi2j~ezi6gbi9eGmzeJafgjk9o2n7m39omcnbe58UmOq!mckO53h~itksoZgHqF2xo|o)qfqW3/mJmLob8(q$c2q}qBmef~0B0xgEktix3cbv0p2c2,9{n01`0-9{0!m eX1gq?k!o+k$8;qv8%ndqnkIrrr1dgqEqGe_q4bTpwk p$3xp@pQbmpDpB3WrJn@jDlclQj8nIhep,bZ0DlLbDpIlQpAq1l!rGr)0`ju2!bKlSbOfQn6jPqg8}rs95i!rvg%r`k/qeroog9ooiq{pmomr~h(96oUj?mf0%0P0*0C1emsi4mui7oCqOivk6qRk80$rniTrp8:oMs7qzoQsaq!j;o@ser3q,gFo!0!0csj0,bveQ17qJ0+bwas0HkAm2sy8|kfqjrwkksEq o?oqb2sgsi1epvnInwe?r(rKl6i|g rNpFpSs{lNh8p?lgr/nPp)g}for%nzr;r+p{5kr.aqn;fPp`mF3VjIqbrHl;q3rNfJnIfzsYter?pd2_0v9M9t9H9v9E1i0$9ytJ2T2O0%1(tG0v9way0*0,0.0(04.

1.2 🦝 Populations des communes françaises (Métropole)⚓︎

On s'intéresse au fichier pop_hist.csv regroupant des informations sur la population des communes de France Métropolitaine à travers l'histoire.

Ce fichier a été adapté à partir de cette source. Les adaptations faites sont :

  • suppression des données de population pour certaines années,

  • suppression des communes pour lesquelles les données sont incomplètes (populations anciennes manquantes). Cette suppression explique que les communes listées soient toutes en métropole (hors Corse).

Fichier volumineux

Le fichier comporte 34 496 lignes !

On déconseille vivement d'afficher la totalité du tableau avec Python...

Les premières lignes de ce fichier sont :

📑 Données CSV
departement;nom;pop_2019;pop_2009;pop_1999;pop_1990;pop_1982;pop_1968;pop_1954;pop_1936;pop_1926;pop_1906;pop_1896;pop_1886;pop_1876
Ain;L'Abergement-Clémenciat;779;787;728;579;477;347;424;506;543;629;572;622;604

Les descripteurs sont explicités ci-dessous :

Descripteur Indice Type Python Contenu
departement 0 str département de la commune
nom 1 str nom de la commune
pop_2019 2 int population en 2019
pop_2009 3 int population en 2009
pop_1999 4 int population en 1999
pop_1990 5 int population en 1990
pop_1982 6 int population en 1982
pop_1968 7 int population en 1968
pop_1954 8 int population en 1954
pop_1936 9 int population en 1936
pop_1926 10 int population en 1926
pop_1906 11 int population en 1906
pop_1896 12 int population en 1896
pop_1886 13 int population en 1886
pop_1876 14 int population en 1876

On propose ci-dessous deux versions du même exercice selon le type de listes choisis : liste de listes ou de dictionnaires.

Requêtes dans une liste de listes

Compléter le script ci-dessous afin d'effectuer les requêtes demandées.

Il faudra tout d'abord importer et typer les données ici sous la forme d'une liste de listes.

La liste reprenant l'ensemble des informations sera communes.

Il y a beaucoup de données : le script met un peu de temps à s'exécuter

###(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

.128013é4r[S=0y9kP)_T5(gfà8l6uHmpinh17;ec./]2d*3, b-owùtz:vMas050N0H0X0$0B0v0%0R0I0v0$0%0%0g010X0B0A010406050%0x0z0z0$0d0i040f0U0v0x0{0U0C050K12141618100A04051o1h1r0K1o100N0B0!0:0=0@0_0=0C0r0x0$0r0H0T0A0i0X0D1f0R0D0B0r0D0v1T0D0X0~050+0S0v0H1A0?0^011S1U1W1U0X1$1(1!0X0d1p1O0:1b0%0A0$0C0_0M011*1C010s0-0H0C0$0z0H1!1 21261,291(2c2e0~0a0R0l0d0U0A0U0%0B1e0C0R0)1}0d0d0H0I2z1h2h0C1p0K1O2M1_1{1`1#0N2j1D0B0C2b2w1!1x1z0;1+2W2Y0C0U2$1!0A2F1p2K2M2?11202A2(272,0d150v1!0$1R2F0s0_030n0n0I2-0H1W2+0U0T0E0M3h0~0R0E1h0$2@2`0 2_2i2|1,2~3032340H3601383a3c3e2Z3h3j24040R0M3o3q213s2K2V013x0$311p330D3537393b0)3H2,3J0T0P3l0P3P2J3r103T3v0_3W3Y053!3$3D3(3G2X3I3i0T0c3l0c3=1i3@3t2{1B3w0U2 3X3z3#3B3%3F3*443,460p3l0p4b2?3^2`3U3|4l403E3)3d4r3g460w3l0w4x4d3_4g3{4i3y3Z3A3C4F433f3-0F3l0F4O3R4z3u4R3V4T4k4V4m4X424q4!460u3l0u4)2L4+4f2)4.4j3}3 4n414p4H4_3j0j3l0j4~3S4A3`534U3~4W4o4G3+4J3j0E0h0~5t5g504B4/555n585p4I3-0E0E5v3n0K3p3?4*4e5z544D574Y4^455s3L3i5x5P5j4C4;4E4@5a5W3h3/040E3;5L3Q4 5#4-5%5m4=5o4Z5,0E485/4a5=5N5@4Q525`564?595q5G4u5/4w644c5O672}5A5S6b5E5b3h4L5/4N6i4y5^686n5(5T5*6d460E4$5/4(6w4P5i5_6A5{5)6c5F6F4{5/4}6K6k6M6z5R6B6p5~4s5s5d5/5f6X666Z6m6#6P6C6R6r0M5u046`5!6l4h6=6a5}5V6)0T0M5I6|5K5M6j6/4,6!5l725D6(5r763L0M3O6.5h7e6;7g5C5U5+750M5.7y6~6:707t5|7i747k0M617J7B7r7D4:6?6%7H3-0M6f7U7M517s7P7h7v6E3K6t0M6v7b6x6 4S717u6D6S3K6H0M6J7,6L7N7/7E6Q6q5,0M6U837X5Q7 6@817x6+0M6-7{6Y7}5k7!7;6^5,0P6{8n865$6O7#7=6r0P788w8q6N7:7F7$7?3.3L0P7o8f7d7Y7O5B8C8u8m5.0P5;8J7q8L7~8j8O8l750P618$8z7f8Y807j3-0P6f8/8)7Z8N8,7S460P6t8{8=8M6o737w7k0P6H945g1s2;1h2$2P0N1{2U5j4G2#1y1p2:0H2=3r651p4G9n2i0B0N0_392K5G3z9u9w8!7k5I0R2n0H9C8a9E1!647.3V0~3b140x2Y0%9p0R6y270U0~0g9W9Y1,0}040e0L9p107c9s2A9B019x2`7T9A9v9@9D9`9G2d9I9}9K9`2M5M9O0k0~0V2y0D9%9O0C0S0~2u2b9p9(0_9*0qalaf0~2l0Haq7C0_9!049$9:am010%3L012v0A0n1S0%0X0J0I0%0!01av8h9*0Qaeaw9P040z3caS8W01ayaA2^9OaE0~010daRaB9OaUaW8h0C0~2b3)2X0ra$3Ua)b05ja-04011d0s0T4{b34-9*0ma^a%a9040?bg4Bas0B0I1S0H0dbc529*0Z9.b09?9^218.9{9J8-8`259HbE8_3j5.3P0RbO9Xar0429bp0Bbrbt9Z0~0JbX3w0~2F0$0N3Hb#an0~0qbf9:9/a+4Abz0n9y46615mb^a4b{bHa1bJ923-b|5=bPbQaXbi0s4ibl5$0~1:2Yce4-0U0V0~2Xcj68bnbUbWa=aXbvbxcu9t9|bA0C3-6fb}cA9~4tc12ec37%0TcEc7c8bPaCa`04ch0H0n2:2u2FcpbYazc#b$cU1Tcicya%ayb!c-bm04aL0d0|b,aGb.b:6xc;b^b`3j6tcFcL8E4La0cKa3bFd29M3pcQcRbR0!3X0H0x0d9V9:c98hb2docScgc+cWcY9lc`c/c`cT1 1W0Xc`aoc`b5010Ga;b?aT0~c}4dc cGd10T6Hd4dabKdVcJa28P75dWcPdfaCcbcddsbR0Bc(axcm04cod/aXagb%211JdGb.c`0z0B0~7odNa%a@d`a_ahcUakc;5jdHef5_0~di1(dldne73Ube0mbwb;bydT9_4`bDdYc4eyd8d$cH3j6UbNdfcQdt04eldkdme09+dBcneQ9-eac.9#d=3Vec2XdFeibue1e(2}ekdjeneQ0eeSd^eUdQ5OdS9CdU6+dXd%7k5deDd56re}d*eKbR9R0z9T0Heo9o9OdAe+c)0$0A0A2b0NeQapfh3{e-emePfqc{04e^5@e`9}dU5teze 5G5uf2eAcMfDa63sfAcB5G78e~eF3h9FbIfJ8E5Hdd9;3U0I78030R1O0i0H0Y0Rfc0X0R0=f=0BaL1)3b0C0X2b21f;1(0/2b1_0bfc2B1fe%c~epd0ex5XfEfT3id#f35 3L3=9Of%0~f)1(9G0U0z2B1)f?f9fbf/aL0R0o0Df,f.0q2b0R0y0$1d1K0f0$0!0UbVfyfNgbewbB6FbM33b~db5-gifX6r5:f!eLf+f-eZdr2?dpe80~e;fvcTg32FaueW3Ud-bsg cf04g|0Hg~g=aCclcn1gh3ej04gy9UeZbi0B0seZg{f|g}e:e2e45/eUg:9#a*3rg?3UdJgDgFdMfecv0~eVgahGcze{gd3hb|g!cGb 5s48fIfF6Fc63pb=hL9=gWcC6FcEhRgj750E4uhWggcOa7aXgo04f)a!0d0S0B0D2if:f=331Wf_1}f|f~f|f=g6g|g50/f{0Ibr2cf|cxgVhNgX5sd3h,g)5 d7fWhXipg,gnf(gvifgtfa9U2B0x0R0#4ih~i0hdhK3R5Pgcio3hdWiriwiTg(iW6Giyd{0~h|iL21hwc%hee)eRg`a{hph7hjasd.h9bRh6h8hzhad@d_i`i$hgiDfbfd3RhA5jhkhmi-e,h5i=i}iPa?g^hs0~0hhvjd1,a)hyj8aCdJiJh}h 21hFjihH04hJdRimfBhO0EeHiVgg4{h;hT3heH5=h#jBhMjHiS0Ee}jLjPjYiYggf5h@8hh_f)0r0d210)0%0n0!0-g1gAg0i4f^f}i7f}ijg0g62,0z0/j;1}9ShieufOb_hO6`gfjPkfjOg$kffMaCj,g7iaf?aH0x0=2zf/2A6`jY2B0b200@1)5t0h0R0hkI1R0$h~0+f|0/0q2X0;0x0%gTjT2LiQh(7TfRj!kkfVc2is7xfR9Nj30rj:fcj?j^fci+js2Lj9bdjki:jf1_i?fv9*g_ep5je35vjoj28hh1hni;l0jhk`i hcldj4k9k@jp0_jblki|hrfvl76|l9i~ff0~020r0X0Gk_3MaClvkF0nkIjnl2hIilh$0RiRh)3Kglk$dZ7nj%khgljSevinlT76gZlRhSkk3/kjlXbMk-j+iAfl0{f}j=j@0vj_i2f?i5j~f{k0f ib0/k4k6g6hhlniOkX3TlS7ThQl,h-7IhVivfT7Ji#l@gpkpj{0Rksku0B1QgIky0jj`lR0C0s0bc^eO1)0t0R0pkJi0kMf kPkR1ckUlPjUh%l(7Th+mkk*7Ih:mokhh?f#h4l_2yk;l}g1k^eZl3e=lslNi/l54-lIlxjta8i^h2laa%holfg:j0iNlyj3mcj7lhn4d^jcn7c=m|m i.l4lQl6hte6nsk|jDi+020vlDlFk{52lvmOlMnp279*jEe_jGfP467*kgkkiuk)iWnRfMkWf#mhnQiUm%nW4$l:eB7@mra%kocYj.fc2xmAgBm1j}f`g8i9k2m8gtmaiClmnhgUlQn#3KjKn(mpjNm+kkjRj*n/iA0Ng8i3mw2ukt0$kv33c@bof}2eiagL0row0X0bkwl03NkImD0*oFjYmXmfb@kZnQjZobkhf1oelXj)m.hfn;2F0@mzndn3aXg;nedOm~nwcqk hqm}nrmY3Un1m}nMnican5lrjgnbljloaYngi@nko nao=jllwo`nzlC0Gp8o;nJ9)k}pj0_lv5;pmfw0Lo{o6o@o83.6{fSjP8nlZg$pBnYl%jWl)8wnSdZpJn+cMpJkmizmtccf^0n5tmEn`i6m4n~m7gsk5iBk8iEmdjFo7oObLlVoRpD24pN8E8Hn.f$ojolkroomy1Q330boB0RfanB0|1WoC200d3mkG0q0UiH0AmV0moD2F3m0u0F0wf/f;mCoLn!p/3.l+g#pLl/oUn,qyp{h4pTj=5wp3o*o(o,o?oMa_lepio.nKplqU1,o_pqnLp6ccn6o+n8qSl1nm5jhbd^o%o|qRllp+o5nE27lqp3n9qTo@egqWr0n0nun2q=eX04lBnCeZlInIq)b10~0Ophq,qXb-o-r352ay0Tpb5Kq!hIptnZkYm!8`mjqAqE8$pCpLhZpuqQmZpH8.m$rCpOm*nVfT8/qG4-ko0HgQ1c2zg2n_j|pZn}k1p$3b0xqjg60qk4gvommc0Qf/rY1do$kVpGnPbLiqp=pLnUd9iW8{rU52ko0U0Wr_1br{n^mv1x0smH2F0Cih2rq0oqo$kwoJmD0Tso0AopkvgIjJqqqvryrL8`n%rOp_n*qDpOd)ohnnr`r!m^p3l3fppqq~rkroqVrnrJo^htrtrlpraVq}q+lgoXnqpbnvsZpknyqL0~rrs-o:sYs$r1s#s:c$s|pqqZs*nLgTq`1,lcs}norfq.nclkp5pdkb2^0K9r989m9a9j1h0X9dtu2S2NkL1(2M9b9/0)0+0-0%04.
Requêtes dans une liste de dictionnaires

Compléter le script ci-dessous afin d'effectuer les requêtes demandées.

Il faudra tout d'abord importer et typer les données ici sous la forme d'une liste de dictionnaires.

La liste reprenant l'ensemble des informations sera communes.

Il y a beaucoup de données : le script met un peu de temps à s'exécuter

###(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

.128013éS=P)5(gfà6Hpinh7e/]D3, b-ùoz:v4r[0y9k_T8lum1;c.2d*RwtMas050Y0s0$0(0o0Q0)0y0V0Q0(0)0)0d010$0o0n010406050)0R0S0S0(0H0K040c0C0Q0R0}0C0p050t1416181a120n04051q1j1t0t1q120Y0o0F0=0@0_0{0@0p0i0R0(0i0s0A0n0K0$0q1h0y0q0o0i0q0Q1V0q0$10050-0z0Q0s1C0^0`011U1W1Y1W0$1(1*1$0$0H1r1Q0=1d0)0n0(0p0{0X011,1E010j0/0s0p0(0S0s1$2123281.2b1*2e2g100a0y0e0H0C0n0C0)0o1g0p0y0+1 0H0H0s0V2B1j2j0p1r0t1Q2O1{1}1|1%0Y2l1F0o0p2d2y1$1z1B0?1-2Y2!0p0C2(1$0n2H1r2M2O2^13222C2*292.0H170Q1$0(1T2H0j0{030N0N0V2/0s1Y2-0C0A0T0w3j100y0T1j0(2_2|112{2k2~1.303234360s38013a3c3e3g2#3j3l26040y0X3q3s233u2M2X013z0(331r350q37393b3d0+3J2.3L0A0w3n0w3R2L3t123V3x0{3Y3!053$3(3F3*3I2Z3K3k0A0G3n0G3@1k3_3v2}1D3y0C313Z3B3%3D3)3H3,463.480g3n0g4d2^3`2|3W3~4n423G3+3f4t3i480l3n0l4z4f3{4i3}4k3A3#3C3E4H453h3/0r3n0r4Q3T4B3w4T3X4V4m4X4o4Z444s4$480P3n0P4+2N4-4h2+4:4l3 414p434r4J4{3l0L3n0L503U4C3|554W404Y4q4I3-4L3l0T0J105v5i524D4;575p5a5r4K3/0T0T5x3p0t3r3^4,4g5B564F594!4`475u3N0T3Q5N3S515R5l4E4?4G4_5c5Y3L5x3?5%5P5)4S545,5o4@5q4#5;0T4a04635z5*4/5}584^5b5s5I4w654y5^4e5Q5{2 5C5U6c5G5d3j4N654P6j4A685|6o5-5V5/6e480T4(654*6x4R5k696B5~5.6d5H6G4}654 6L6l6N6A5T6C6q614u5u5f655h6Y5`6!6n6$6Q6D6S6s0X5w046{676m4j6?6b605X6*0A0X5K6}5M5O6k6:4.6#5n735F6)5t773N0X5$7c6y704U725E5W5:760X3;6}5@7q6M7f6=7h7v6E6T3M640X4c6/5j7F717H5 7j757l0X6g7Y6 6;7S4=6@6(7W3/0X6u7-7#7R7t7T6R6r5;0X6I7`7:537G7(7i7w6F3M6V0X6X7D6Z7;5m807I6_7_6,0X6.887e7~7%5D7U827K3:6|0w0J7}5S7?6^7^760w798B8v5+6P817J6s0w3N8K8E6O7u8o8I5;0w7A8T8N7g8c8Q8e8A640w7O8j7Q8l7=8Y7@7k3/0w6g8;8W7 8n8.7+480w6u8}8@8m6p747x7l0w6I965i1u2?1j2(2R0Y1}2W5l4I2%1A1r2=0s2@3t5_1r4I9p2k0o0Y0{3b2M5I3B9w9y8!7l5K0y2p0s9E8z9G1$5^7s010M0p100o0S2x0H0$9r6z290#3n9!9Q0p9T040V0)0F9r127d9u2C9D019z2|7,9C9x9`9F9}9I2f9Ka09M9}2O5O9*103d160R2!0)9r0y9#1.0C100daiak0{0 040I0u9;9)4C9_9{238:9~9L8/8|279JaE8{3l7A3@9Q0M100#2A0qap9*0z102w2dax8aas0ha!8+3X102n0sa(3Wam04ao9?aq010)3N012x0n0N1U0)0$0W9.0F01a.5las0xaU7$3}100S3eb64/a:a=2`9Qa_10010Hb5a?9Qb8ba8a9,2d3+2Z0ibg54bibB29bm04011f0j0A4}bE1.as0fbua)aP040^bR4Da+0o0V1U0s0HbNar100Eawbray9 aA0p3/645oaza1484aa32gaJ94b=9O3r0yc3ajab041*2J0s0Rb%9?c5bb01bDcda@9,b3b(cg100Wcm9,0vbZ0$0!0s0(0+ccbkcfa$cqbYb!0ob$cmbtcic64s0S2AcHb-8achcA8abG010UbqcTa)bPb,cZ0yb^9A4vaDa6aF3l4wb|a58R766g3Rc4ce8abT0j4kbW5+102d1{0sa-cKcf0C9%042Zd06910c80$cacz9qbsb*c$dkb.9Ec*3l6ub@b/b_dsaHa4b~830Adt5%c`c`a@c}c d7bv100+0)0V0H0~dhcbddbCdadcdKa)bw0pd4d6c%b7dm9?9=c%c)9|486IdudA8q4(c;d?6sd;dEdFd~dH9U0jdU2 dM0sdOdQ0ndSdj3Tc{a)d9102.9ZdYa/dW1iejd)atcmcV0+229Y0s2gd#cYdoa#10b9en4/cV2.0Sey3Ta@as0ub+d+a.d.aB4|c,c?7l4}d_c-aKbLc13Od~e%c3cjd2d#2Hd%ezc!100IcD04dNdPdRdicI10aveDbCane33yaWdbd#e|04a%cQdZe+d$f7e=fabXe@e6e_e9e{fgeo0ubQeOfgeQb;486,d=eYb fvdyb}fydBfwd}d c6ad0Safe6cma:cpfndebU0n0n2d0Yf7f9d(fRd3e-f7fq6yfsdvdr3j6|fxeU5I5weXf:6Gf.5%d,e/c(f+d/5u79f/dw3j9HaIfD8q5Je#a@0V79030y1Q0K0s0D0ye60$0y0@gn0ob01+3dd#2d23gm1*0;f#0be62D1heif)d-f~eR5ZeTg35#fBc=gM3NaNcfgc10ge1*9I0C0S2D1+gofJfLgkb00y0O0qghgj0h2d0y0m0(1f1M0c0(0F0CcGf(4ff*dqf 5=4Xb^a76G3;f?gMaM9Pcf9,gggif20{cS3ted3WasfffZ5|fcf$e 29dIeb2Nhnd104f#d5hjcgelhFckgZfKaghFbT0oe2hv3yhthEfQ54hpeqa`eGeI2NeKe}hFbibjhma@cVg-g/h#9@hoh(frgHh3gJ3jb?35h7c.h|gOd`62b?f`ePgIfu5uc^h~dvh8iai2g76s0Tc^he8agU04gebe0H0z0o0q2kglgn351Ygr1 gu2ed#gngCgAgCgt0Vb$iDgFh1h_a0f,0Tdtici376iSigf@5udDaagTgdg#0;g(ag2D0R0y0%4kisiuemgGf|ft5Id;iUih62d^g6iZ3jd|i$dL04iqi=23h)f1hRb)ephVe4hCe,hU2^hA4/hxhIhTe.eca@eff5jp9-hKfLahjd9Re1jwhDjrh$dljfhrbFa`es18dhew1#f7e~jljtanh+jsbla`i:irit23h;h%04jTiOi_i85I6Vg2ie3jeWj1gMj;i6h2iQh40Tfwi}j2k0iYgMfFj5a)inge0i0H23dN0N0F0/gyg*gxiygqdhiBdhiMiF0;eG0;dN1 aehMh^j.h`i977f.k2g36{k5j?kIa9h=9ii(0YgEix0ya|0R0@2Bgk2C6{k02D0b220_1+5v0J0y0Jk.1T0(is0-d#0;0h2Z0?0R0)h05Qj}b:7,g1kGkKg5dzi~7yg1ilfb040ikee6kgkifMjBhljYcBe;e?jFfehYbnh!jShNa+dJjUc6lqlkhHjBhJkyljlzcfhOhQlIj6lBjKbOlojg1.cVa|0Nk!5flvlk10020i0$0UjXhza@cN5xk.0Nk.8ulSjej,k iPl1487ogLkK26hbl e#f{eJ3Vi`l|aMl4i07zkJmbhdk83WkakT0,cO0)lh0QkjiwgoizkogtkqgwksgY0SkviIjykzi^m5dpj~h{7Nl~mbb{j_kKi5mgkOgVgDiEgokUkW0o1Sg=lXkkc(0p0j0bdQdi1+0k0y0gk/iuk=gwk^k`1ek}dnmF9vj/l|ibf}iV7Xc:mNmbikmQfRfU0}dhmmkhmolHh,9Qlll+jIhqf|hBlOno4/hXl?a^hZgZj)jIl^nllJlxhy3Oe*jifdlC9Ui@nihfacmCnhlmc|jDlEjqlrnulU2wlW0Jk4lZlMeel#0Ql(l*nF9Ql-04m:l=lPl@m|jHmGl{3MiTn2l87X4Nm1mbi#3ul00Nf,7`mKeZoao3ocj4kN4/mi2=0Ckce62zmZg+mrkngsgEgvmUgCkui)kxhLnQ5)o7o9j;maocj^l7j286ga9QmikQmU35mW0(kX35b0dQc9jQ0yg^0ijQ0bkYd43Pk.0LgkgmlXn_h=m73Mk1n oL5foefzo^oNnN04okom0_mYnLnRn)a;hFntn@a*nHhupdpcnr54eFnxn%nMnS04c~nEjmhspfjkpoeelDn(fhi+oCn.nCdblLpxfhnqm}e:jJpjjLbnlVlXnylnj+jb04l$l(jEjjjGohhWlRpdnYa}6{0JlYnueLnAo6l`o8h48tobo~8rmdeZp`kMm4n`m~kC8:l3o`g38Bp~p|qakMgbi(c~gq0N5vm$oriAmuovgxoxgZmAi*nPjAmEq39^m aLgRoHqcm0n6p gRlbmhkPkRmV2wkVoUp6o#0y0b0$o)fKn+0~1Yo)et3ok,0h0Ci.0nm`0fo*2H3o0P0r0lo/o,k0o=5Ro@3:m9q8j?8TqbdBr2qec6qhmm5yl!pajBpipLpJp#nWp*nweHpnp83WjonUpvp$pt29judXpAhBpCqwpI5llKp!nIphp)pOlTa`pRn#p/rGpVrbpYl)hFn:rarxbh100ZrEpgrIjennrf5lp+qjq=4NjSp=q2o?qA3:h}r0i08%r38qr{q1i7q58|n1h p n5oKq9n8p%29mi0sg}1e2Bgzoqkmqnoukrkj3d0Rq,gC0heGg#kSpC0xgkse1fp6k~oDp@f,8}p{r4o2qGqco5qfmS0C0Bsy1dsAopkl2DhPm)2H0piK2tqOmXmZkZrM0y0As$0nqPkXg=0Tr-q{m6r?96sHr}j0s7r1ognGsdsSsgpWn-rtlQatfYr$pepKqyh?pNr)eErkpTeAj+eCrWputesat9r(tfr*rKnZpSrmnBcR100Ar!pwtip(thtvtjpQnZs?q?tlpMfplwpqlyrBf!rhnJjvrqrztAp?9q0t9t9a9o9c9l1j0$9ft:2U2Pk;1*2O9d9=0+0-0/0)04.

2. Requêtes élaborées⚓︎

2.1 🐻 Meilleurs films selon IMDB⚓︎

À ce stade nous savons :

  • ouvrir un fichier csv à l'aide de Python,
  • lire son contenu dans une liste (de listes ou de dictionnaires),
  • typer les données,
  • effectuer des requêtes sur ces données à l'aide de listes en compréhension.

A. Présentation des données et import

Nous allons pousser notre étude un peu plus loin lors de l'étude du fichier films.csv1. Ce fichier reprend les 517 films les mieux notés sur le site IMDB.

Les descripteurs proposés sont :

Descripteur Indice Type Python Contenu
Ranking 0 int rang du film dans le classement
Name 1 str nom du film
Year 2 int année de production
Minutes 3 int durée (en minutes)
Genres 4 str genres associés (voir remarque)
Rating 5 float note moyenne(sur 10)
Votes 6 int nombre de votes
Gross 7 float revenus générés (en M$)

Les genres

Chaque film est associé à au moins un genre, certains à trois genres...

Dans le cas où plusieurs genres sont cités, ceux-ci sont séparés par des virgules.

Voici les premières lignes du fichier :

📑 Données CSV
Ranking;Name;Year;Minutes;Genres;Rating;Votes;Gross
1;Citizen Kane;1941;119;Drama, Mystery;8.3;442770;1.59
2;The Godfather;1972;175;Crime, Drama;9.2;1849989;134.97
3;The Wizard of Oz;1939;102;Adventure, Family, Fantasy;8.1;400883;2.08

On importe les données sous la forme d'une liste de dictionnaires. Le code est le suivant :

Python
import csv

films = []
with open("films.csv", "r", encoding="utf-8") as fichier:
    lecteur = csv.DictReader(fichier, delimiter=";")
    for entree in lecteur:
        entree["Ranking"] = int(entree["Ranking"])
        entree["Year"] = int(entree["Year"])
        entree["Minutes"] = int(entree["Minutes"])
        entree["Rating"] = float(entree["Rating"])
        entree["Votes"] = int(entree["Votes"])
        entree["Gross"] = float(entree["Gross"])
        films.append(entree)

Import réalisé !

Dans toute la suite du TP, la liste films telle qu'importée ci-dessus sera accessible dans chaque éditeur.

B. Votes par genre

Le fichier compte 25 films dont l'un des Genres est Family et 26 avec le genre Horror. On précise qu'aucun film ne possède ces deux genres.

Parmi ces deux genres, quel est celui qui a reçu le plus de votes au total (en additionnant les votes reçus par chaque film) ?

Comparaison de genres

Compléter le script ci-dessous afin de compter :

  • le nombre total de votes qu'ont reçus les films dont l'un des genres est Family (utiliser la variable total_family),

  • le nombre total de votes qu'ont reçus les films dont l'un des genres est Horror (utiliser la variable total_horror).

###(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 : 5/5

.128013S=P)5(OUgf6Hpinh7eq/xC]V3, b-o:vA4r[0yk_8lum1;+c.F2dRGwtas050!0s0(0)0o0Q0*0B0W0Q0)0*0*0c010(0o0n010406050*0R0S0S0)0J0M040b0E0Q0R0~0E0p0B020)0S0n0U0B0#0s180J0t0R0s0*050u1517191b130n04051G1z1J0u1G130!0o0G0?0^0`0|0^0p0j0R0)0j0s0D0n0M0(0q1i0B0q0o0j0q0Q1/0q0(11050.0C0Q0s1S0_0{011.1:1=1:0(1{1}1_0(0J1H1*0?1e0*0n0)0p0|0Z011 1U010k0:0s0p1m0s1_2h2j2o212r1}2u0S2w040a0B0d0J0E0n0E0*0o1h1j0,2f0J0J0s0W2R1z2y0p1H0u1*2%2b2d2c1`0!2A1V0o0p2t2O1_1P1R0@202;2?0p0E2`1_0n2W1H2#2%37142i1j2|2p300J180Q1_0)1-2W0k0|030O0O0W310s1=2 0E0D0T0l3y110T1z0)383b123a2z3d213f3h3j3l0s3n013p3r3t3v2@3y3A2m040Z3E3G2j3I2#2:013N0)3i1H3k0q3m3o3q3s0,3X303Z0D0z110z3(2!3H133,3L0|3/3;053?3^3T3`3W2=3Y3z0D0I110I441A463J3c1T3M0E3g3:3P3@3R3_3V3|4j3~4l0f110f4q37473b3-4b4A4f3U3{3u4G3x4l0l110l4M4s484v4a4x3O3=3Q3S4U4i3w3 0r110r4%3*4O3K4*3.4,4z4.4B4:4h4F4?4l0P110P4{2$1K351z2`2*0!2d2/49014V2_1Q1H340s363H453*054V5v2z0o0!0|3q2#3 0T3P5D5F4E4W583A5J0B2E0s5M4V3}4Y5Q1_0u3F4t4Q110(0E0.0Q0O0k1m0:0M5x2$0B5%5n0E110c5?045^4)2}010S0o110L5~134r5y3,5L015G3b3 3#4d0B6d565O4k3!2n5T5V4=6o0D6i5#5B4u620p5)5+3:0O1+2V4x5~604P5`5|6J5_4 6466685~5%6l0O5H4l414.6W5W4X3 415S2v6s576u6!3(69396c5E6e6X6g4l4n6#6^6m5X3 4n6+2F6-6n4H3A6}44612p0N110k6I6a5@6P6A112t2b0s0s6O7c210E0%112=7r6L4 6B042C0S1y7i6y3-10040F6T7G6V6 6`2j3 4J6~76714I6q6,6_6%5P0D7T3(0B7*6K4~627e040o0k7y7-2p0*3#010Y5:0Q0M017?6z2p7u7w0p815(047n2W7q7N7s0|7J0K6U8e017_11010$2t2W0*808d7z627J0x7L7G6=5w6@5M6Y3A4!7U7!6t780D4!745U8I6.8K8G7)7+8U7k3e6C5,5.7}5=7G7,827t110V5}8%8W3M7m0p7o8c6?8u2p8g8i8_218l04010y5+1x8s8^7@218w7M961j6W8E0D4^8H706(4l4^8N7V9j3A9g8T7*8/0|7/4W7=8.8j8 010m4x2L0J953H8(3-847:869y8}4a8;8?8|978f118h8t9T8k7`8o0p8q9G6b9O018w8y4N9S9c7P9e5a9h5N7W3A5a9m8P775Y0D9?9r8U9I5n7B5*8Z6G9E876M048,ab7A9Q8b9/7I9Vaj5n9A920(94am4 998z6U0u5A5f5u5h5r1z0(5kaD2-2(0)1|aA0u5i1F7H5n2W0S8!0N0s6F6!1r1t1v1x0B9-5w1M3I1G0h1j340E2raq6k0W0o0B0!0R0B5/2Q0Ba!0B1}0=0,0R0v0B1#9$a#0*1i0(6k0p3s1n0)0~aK0=0g0!2j0=0W0-a;1=0*a;2T7D0=051s043k640p0o181zbz0e0X1Ka*1ca@0Q001,ba0R0q0/a;bf2i2W0Ja^0sb4b68pa#bWbh0obj0A0B1,0!0Ea}1g0:0o0*0sbZb3b55z3t3-1W1Y1!1$1(1-1?251@2x9*7/7;aw5A0B0-0B2i0=0R1jb 2T5nc21Z1#1%0Mc7241?1^aP4 cd9x37a44 5{040XcJaf7.7m1=cDa(5A0X0B0w001xbc1}0?0_cj19ch0v1s0ncY0)0G2Xb0a#b78q5^5A0H0!c-8=0R2W1zcgcico5u7|647~c~3t2%1N0+1Qc12jc3ct1(1*1,2j300.a;231;cycb9Y2C2t2v110d1)1+9M395t6y3)5eay8C6_6Y0r3B9@7#4kdJ5R6r9}7WdO2n544DdM4HdT2%5$8ja66D5-0)c_7nc|8@9H9t01cH8-cEd:6R0467av9X9:8D6{dJ6i3k6$8J4Ye17Y75dR9je74/dWe53ye7d!cA7l04a76E5/d48$d@8jd=cL2pd_d{9.d}6k9;e0405K7PdXe6eD9|9i58dJ6*dV4g9^ebeDei8A9)5CeB7R0TdJ7ae3eFefeZ4me88OeKdNe*edePeGege*eid:7/7g0Jeu8:898=ai9N9Y9K7xf28)9P7C0:7Eas8v11a%4|aj9deC7(e$9neL7%e+fme.4Je:4;8QeH7(6x8V8jcCe}0|9Ac^c`0(d-9(7jes7v9LfC3.ah7pfc8`alezan9!b(8rfS98118x9a8B4PfieYdJ8Sfleafn8MdQe-dY8LdU4Tf@eH8Sfya39sd$8Y6Ed*fGd-fOcHaef6888afRfVatfU9b3-ao93fZgffd040xf(eVd~dHeC9qf/f|e?9lf?eQfn9leOfu9~gz5!3Ffzcc7wcP3*cF629Ad35;fJ5 d:f4dzd/g2e 9RgnfT049WgifW8m9#9%f!9Ugpff5@gQ2p0W5J04030B0g0T0egr5edG6ff,a0eEfqf^9{gBe=e)9{gFgyhfgJ5 g0g_e~em5-eo5;g88+d?g!9*7Bgdd.gsakg*g;9Z8maparg(f#gph32%ay1M5gaM5r131e3I1=040i1jb`3s0p2/d1dc1Xcsc5cvdnc9cze_gNcfd70B0)a`1=b#a^00cmc?c0cqddh+cucwdo26dqf7019vcOh?0,2%hW69hU690,0.0:0*04.

C. Projection(s)

Comment faire pour n'obtenir que les noms des films cités dans le fichier ?

On peut procéder ainsi :

Python Console Session
>>> [entree["Name"] for entree in films]
['Citizen Kane', 'The Godfather', 'The Wizard of Oz', 'The Shawshank Redemption', 'Pulp Fiction', ...]

Afin de généraliser le procédé, on souhaite écrire une fonction projection qui :

  • prend en argument la liste de dictionnaires à manipuler ainsi que le nom d'un descripteur,

  • renvoie la liste ne contenant que les valeurs associées à ce descripteur.

La fonction projection

Compléter le code ci-dessous en saisissant la fonction projection telle que décrite.

Attention, les résultats doivent être dans le même ordre que dans la liste initiale.

###(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 : 5/5

.128013r[S=y9kP)_(gflumpinh1ec/]2d3,R b-owt:vasj050B0w0K0N0s0o0O0F0x0o0N0O0O0e010K0s0r010406050O0p0q0q0N0b0f040d0I0o0p0*0I0t050y0;0?0^0`0/0r04051a131d0y1a0/0B0s0M0Y0!0$0(0!0t0m0p0N0m0w0H0r0f0K0u110F0u0s0m0u0o1F0u0K0-050T0G0o0w1m0#0%011E1G1I1G0K1O1Q1M0K0b1b1A0Y0}0O0r0N0t0(0A011S1o010n0V0w0t0N0q0w1M1.1:1^1U1{1Q1~200-0a0F0i0b0I0r0I0O0s100t0F0R1,0b0b0w0x2l13230t1b0y1A2y1(1*1)1N0B251p0s0t1}2i1M1j1l0Z1T2I2K0t0I2O1M0r2r1b2w2y2#0:1/2m2Q1_2U0b0@0o1M0N1D2r0n0(030k0k0x2V0w1I2T0I0H0v0g330-0v130N2$2)0.2(242+1U2-2/2;2?0w2^012`2|2~302L33351?040A393b1:3d2w2H013i0N2:1b2=0u2@2_2{2}0R3s2U3u0H0C0-0C3z2v3c1e2Z132O2B0B1*2G3g0(3P211b3(1c3$2%143!3/2!2)0F0s0B0(2{2w3T0v3k3 413q3Q2J3t34360F290w483/3R324d452y3a3e2*1n1U0h0-0R0n3Z3B4q3E0J0-0F4y2x4A3-3F0n0-2Y0I0P2s2u3_4z3D4I0,040l4F3|3f4s0(0t4v112K0w0O4Y4H4#014V0D4Y4E4T4/4%040R0O0x0b0+0K0w0p0b4-4^2R4:0-0j0L4Y0/4R4G3D4701422)3T3w052=5h3O3r4b3S4d1?4f1 4h5i492 5s4l3v1M0y4p561_4C040F5M4E5e4Z4r570O0B0-015W0E1}0M0I0s1R0!0F1I0O512n4+0F0M3H520b0X2o0x1R4|4~505=5W015c553}5p0k434d3V3J3~405z4j5C3T3V5w204i5r316f5F3a5N4@3}4I4u042r0K53125P6q4!574V0c626B2,0-1}1(0w0w6F5R1_6D6N3E4`5{4 0r51536R4U0-0z4?4.576t0n0I546z6(6H046J2r6M6.5I1U0I5K2J6%6_4$4(0t4*4,5P6/1U4V6$5P5d3^3{3#0w2y3=2z3*132C7k0N1P7f3%1k3d0y0R0T0V0O04.
La fonction projection_multiple

On souhaite désormais récupérer les données associées à plusieurs descripteurs : la fonction projection_multiple prend en argument la liste des données et un tuple contenant les descripteurs à conserver.

Par exemple projection_multiple(films, ("Name", "Year", "Rating")) renverra la liste des tuples formés du nom, de l'année de production et de la note de de chaque film.

Python Console Session
>>> projection_multiple(films, ("Name", "Year", "Rating"))
[('Citizen Kane', 1941, 8.3), ('The Godfather', 1972, 9.2), ('The Wizard of Oz', 1939, 8.1), ...]
Aide

Nous avons vu comment créer des listes en compréhension. Il est aussi possible de créer des tuples en compréhension :

Python Console Session
>>> tuple(2 * k for k in range(3))
(0, 2, 4)
>>> [tuple(k * lettre for k in range(3)) for lettre in "ab"]
[('', 'a', 'aa'), ('', 'b', 'bb')]

Compléter le code ci-dessous en saisissant la fonction projection_multiple telle que décrite.

###(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 : 5/5

.128013r[S=ykP)_(gflumpinh1ec/]2d3,R b-owt:vasj050A0v0J0M0r0n0N0E0w0n0M0N0N0e010J0r0q010406050N0o0p0p0M0b0f040d0H0n0o0)0H0s050x0:0=0@0_0.0q040519121c0x190.0A0r0L0X0Z0#0%0Z0s0l0o0M0l0v0G0q0f0J0t100E0t0r0l0t0n1E0t0J0,050S0F0n0v1l0!0$011D1F1H1F0J1N1P1L0J0b1a1z0X0|0N0q0M0s0%0z011R1n010m0U0v0s0M0p0v1L1-1/1@1T1`1P1}1 0,0a0E0h0b0H0q0H0N0r0 0s0E0Q1+0b0b0v0w2k12220s1a0x1z2x1%1)1(1M0A241o0r0s1|2h1L1i1k0Y1S2H2J0s0H2N1L0q2q1a2v2x2!0/1.2l2P1^2T0b0?0n1L0M1C2q0m0%030j0j0w2U0v1H2S0H0G0z0z0G0u0,0u120M2#2(0-2%232*1T2,2.2:2=0v2@012_2{2}2 2K32341=040z393b1/3d2v2G013i0M2/1a2;0t2?2^2`2|0Q3s2T3u0G0B0,0B3z2u3c1d2Y122N2A0A1)2F3g0%3P201a3(1b3$2$133!3/2Z2(0E0r0A0%2`2v3T363J3~40013O3r2I3t33351?280v413q3Q4c3S4e453Y3D3-010g0,0Q0m3Z3B3e2)1m1T0I0,0E4y2w4A3E0s0m0,2X0H0O2r2k0j0p0o0n0)0q1P4H3|3f4C0%0+040k4!4J4s0s4v102J0v0N4,4r4%014)0C4!4G4_2Q3F4v4?0w0b0*0J0v0o0b4@3_4z501^4)0i0K4!0.5d4I3D3 4j434e3w052;5p494k2~4m315s4g1~4i5x3/3R5B3v1L0x3a4-4`4E040E5S4G5m4#4B510N0A0,015$0D1|0L0H0r1Q1P0W0L3H595b2m1Q0w4?5@0N55575=0N5$015k4^3}5w422(3T3V46665y5I695D1 4j5H5A6f2x3a5T4 3}4s4u042q0J5a115V6p4$514)0c646A2+0F0,6v4Y0v6E5X5g0,4+5V5O514/041|1%0v6L6R5f1T6C6M4K4v6(4s4)0y4~6S1^6s0m0H0b6/6#0%6U0A6_6q4`0H5Q2I6~6F3h535|560q585a5c2$6`4{0,0i746N1T6=6@7j6)6V0s6X6Z2!6z7k0%710,736y6:76040A4;6Y7d3!7f6-636R0x3{3#0v2x3=2y3*122B7W0M1O7R3%1j3d0x0Q0S0U0N04.

D. Sommes et moyennes

Quel est le montant total rapporté par l'ensemble de ces films ? Et le montant moyen ? Pour le savoir il faut dans un premier temps additionner les revenus générés.

Écrivons une fonction pour cela.

La fonction somme

Compléter le code ci-dessous en saisissant la fonction somme qui :

  • prend en argument la liste de dictionnaires à manipuler ainsi que le nom d'un descripteur,

  • renvoie la somme de toutes les valeurs associées à ce descripteur.

Remarque

Vous observerez que l'on ne teste pas la stricte égalité des résultats car les valeurs manipulées sont des flottants et qu'il y a des erreurs d'arrondis.

###(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 : 5/5

.1280134r[S=0ykP)_5(gfl6umpinh1I;e+cq/x]2d3R, b-owt:vasj050J0B0S0V0v0q0W0N0D0q0V0W0W0f010S0v0u010406050W0s0t0t0V0c0h040e0Q0q0s0=0Q0w0N020V0t0u0A0N0L0B0 0c0E0s0B0W050F0|0~10120`0u04051x1q1A0F1x0`0J0v0U0*0,0.0:0,0w0o0s0V0o0B0P0u0h0S0x190N0x0v0o0x0q1$0x0S0^050#0O0q0B1J0-0/011#1%1)1%0S1/1;1-0S0c1y1X0*150W0u0V0w0:0I011?1L010p0%0B0w1d0B1-282a2f1^2i1;2l0t2n040a0N0j0c0Q0u0Q0W0v181a0Z260c0c0B0D2I1q2p0w1y0F1X2U2224231.0J2r1M0v0w2k2F1-1G1I0+1@2(2*0w0Q2.1-0u2N1y2S2U2~0{291a2:2g2@0c0 0q1-0V1!2N0p0:030l0l0D2^0B1)2?0Q0P0I0K0P0y0^0y1q0V2 320_312q341^36383a3c0B3e013g3i3k3m2+3p3r2d040I3w3y2a3A2S2%013F0V391y3b0x3d3f3h3j0Z3P2@3R0P0K0^0K3W2R3z0`3!3D0:3%3)053+3-3L3/3O2)3Q3q0P0b0^0b3|1r3~3B331K3E0Q373(3H3,3J3.3N3;4b3?4d0m0^0m4i2~3 323#434s473M3:3l4y3o4d0r0^0r4E3z1B2|1q2.2X0J242$41014N2-1H1y2{0B2}4W4j3Y054N4;2q0v0J0:3h2S3@3t3*0N4|4~4w4O3n512e2v0B564N3=4Q3r523|404n0:0i0^0Z0p3}4@5l2;010R0^0N5s2T4l4I0p0^0W0Q0~0B5A4`4m5v0@040n5K5C4)0w5p192*1o5R5u2g5O0M5K5z5!3E5p1o0D0c0?0S0B0s0c5Z4H4)5O0k0T5K0`4?5B3!55014 323@3T45544}64575g675b2m5e4a594d680F3x5S5m5w5y0N6t5^3C6q0W0J0^016B1i0w0U0Q0v1=0,0N5G5I0N0Z0)0U3(5=0c0)2K0D1=6O5.5:6S6B015~6v1a63652a3@3_536+6d4P6.6g2w6i4x6k3r6/3W6t6u5*420^0S0Q0#0q5(6p5v0Q0^0f7972010t0v0^0g6(605L6a56504d4f6:6b496{4c3r4f0N5c6`587y4e1-6n04705)5_6q5o040p4p7f7M5v5U042k220B5J7n7L6w7b5x042)7S7%355V0w5X1p7n7a5#0^5}7n5 30627v0l7r3r4B7u7D6e4A6^5d6c5f6?872U3x7K7K7@5+0475777,5M2g7c040C7e7#8i737W0w7Y7!7}7T7^040d6)4I5,0W6Z0u5;5?8G5`0^0H7m8B4{7 810P4S848a6j7F4S7B6h8!7x4z3r8Y6 708v017O2N0S5?0w8n8H8k763(8S4=4_4X4:4Z4-1q0S4$972!2V0V1:940F4!1w7o4)2N0t0l0p0V0i0B0l0x6/1i1k1m1o0N7`301D3A1x0z0q0N0B0G0v0W5;0N0u162G6S0)5G162I0)3(5;0c2l0=0U9y7`1E050s0q3A1)040V9$0D0N6J7Q0w2P0v1Z4^3k042{0Q0X2O2Q0F4_9z1q9.5 9+3A2.3#1N1P1R1T1V1X1Z1`1(1*1,9j6q2t2k2m0^0j1W1Y8`7?4/5L3X5B927~7q660I0b3s3H6;8b6kaK3t8(6_8*7E4zaQ2e4t3K4M8#aWaL8eaq5v7O5q8O6q7)5z7?7g0w5E046L2wa.5N0^5Qa=8C8j0J5W7Z7=8T8o1^5$8{5T8I8K8M5@b07-b90^5|905t4H6;7raK683baNa$4Qbr88858cbx3Ia!7waVbw3p7H6o7ga:8:bhb80:6y6A6C2k6F6H9?3ba`6X9y6Q1;5?6U1=6W6N5-5/8L6#6Bbm61bo8VaIaK6~bt7 aO4cb_byaU86b bC4vb}a%6~7I8ha?748~788u7g8q8t2~7$bO7h7j047l7{8Gbpb^7G8ZbEc27GaS89cwbAcyaZc5bv3paK7t8/71b15n0^7Qbgcj8;7Vb#6Sbb6q0Q7)7+cfcM3$0^a0a29`19a|8Da b78|b37:b5c-bj045%c#bi8w6Yb-bfc^0:5{9A4kbN7p6cbq0P8369bu8+bG4BczbzaPdbaY4LcBdkdcc98gcLc}c%8}8mc|cl8q8scW7U0^cU8Ncqd7cs6-aJ8XaMb|cGdL8%7Cc1cC8%cE486=dk8.drdtcl8?0!8_dC7.dw8 dH9B921D4Y9g4-0`ab0`9.9:2ObW0N9^c+1a9}0Za_0}1qa62Kawak1a7`a91qd`0Y1Hae2aag1S1Uaxal1*1|1+2oc$as5cavepaz30aB4laD1yaFb?aHdK0ma(dddOdf3peKaRdSdo4ceQdm4udXc64QeVa)8;a,3Jd26r7Je*a@5F5Ha{d78P5Pe-7/7;e*badyc;b,6!dGc:e?bld/4WaGd9aIeKbsd8eT4zfac0fde!bHc4eYdPffe$bK6s6ue=6x6z046$6DbU6IbXe:bZ6P6Rb%b+0*fCbeb/6%f5bn8UeI0weP3^dNdjeUfSdidT6keK3_fka#eO0If!bI7J8:7gd(8^9Zd+3E0O5Fe7fsa}5P8Ff`d,7X2N8Af6c$5Of}f26q7Vc f0cQg3du5O8Re}4)7OcPf=8wg07Zgl01cY0^c!cRcb04c=e`f~c_0H0kb;2Ud;eCd@0U3Aehd|9;d e12I5z4_c)a39{aza60!gN19e2gQ9~1se89~a70Fef0Fehad4)af1Qenajay1!eraoeuduewau04ebay5ReC9B30eGfOf8dK0reLb{fU4zhbeR8)fh3phgeWbDdY4chlfoc$e(5rgz0:a:e-a^bYe{a~e^gwb45Yhv01e|guc$g9e b.f1gdcld4gD5CdJfQ0IhbfbdebFhkfjeShohffjdWf%h#hXbHhrdubLfrg75vbQfvbS6E6Gfz6KfBb+fDb$6TfGb*gahO0c6$hTf76,hWhbb`fch)4Qigfgijh$f#h,hjh/c88ff-hs0^8@d*ghg8f@e60thBe@hH7VgSe2iFc/hQc;hFb6iNe?c{hKduhM8Jd0cVhH5{gCfM5Ba59~932U9h4Z0!0$0(04.

Il est désormais possible de calculer la moyenne des valeurs d'un descripteurs. Là encore, écrivons une fonction pour cela.

La fonction moyenne

Compléter le code ci-dessous en saisissant la fonction moyenne qui :

  • prend en argument la liste de dictionnaires à manipuler ainsi que le nom d'un descripteur,

  • renvoie la moyenne de toutes les valeurs associées à ce descripteur.

Remarque

Une version de la fonction somme précédente est fournie. Vous pouvez l'utiliser dans votre code.

###(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 : 5/5

.128013rS=ykP)_(gflumpinh17ec/2d3,R b-owt:vas050z0v0I0L0q0m0M0D0w0m0L0M0M0d010I0q0p010406050M0n0o0o0L0b0e040c0G0m0n0%0G0r050x0.0:0=0@0,0p040517101a0x170,0z0q0K0V0X0Z0#0X0r0k0n0L0k0v0F0p0e0I0s0~0D0s0q0k0s0m1C0s0I0*050Q0E0m0v1j0Y0!011B1D1F1D0I1L1N1J0I0b181x0V0`0M0p0L0r0#0y011P1l010l0S0v0r0L0o0v1J1+1-1=1R1^1N1{1}0*0a0D0g0b0G0p0G0M0q0}0r0D0O1)0b0b0v0w2i10200r180x1x2v1#1%1$1K0z221m0q0r1`2f1J1g1i0W1Q2F2H0r0G2L1J0p2o182t2v2Y0-1,2j2N1?2R0b0;0m1J0L1A2o0l0#030i0i0w2S0v1F2Q0G0F0y0u0F0t0*0t100L2Z2$0+2#212(1R2*2,2.2:0v2=012@2_2{2}2I30321:040y37391-3b2t2E013g0L2-182/0s2;2?2^2`0O3q2R3s0F0A0*0A3x2s3a1b2W102L2y0z1%2D3e0#3N1~183$193!2!113Y3-2X2$0D0q0z0#2^2t3R343H3|3~013M3p2G3r31331;260v3 3o3O4a3Q4c433W3B3+010f0*0O0l3X3z3c2%1k1R0H0*0D4w2u4y3C0r0l0*0o0G0e1`2H4F3`3d4A0#0)040j4R4H4q0r4t0~2H0v0M4Z4p4U014W0B4R4E4-2O3D4t4*0w0b0(0I0v0n0b4,3{4q4W0h0J4R0,3@4x3B3}4h414c3u052/5e474i2|4k2 5h4e1|4g5m3-3P5q3t1J0x384!4.4C040D5H4E5b4G4@1?0M0z0*015R0C1`0K0G0q1O0X0D4M4O0r2H2k4*0D0K3F500b0U2l0w1O0O0M4|4~5.5R015953215l402$3R3T44615n5x645s1}4h5w5p6a2v385I4?544.4s042o0I510 5K5G5D4^4$040M0G0:0v5 4z4^4W4Y6t6v2)4%5%0v4*6D3C4:4=6J3f4`5^4}0p4 516P550*0h6S5M1R0G0*0x6)6l6w0E0*256#4.6G6^6w6L4)4+6I6*4V6%5~6I0x3_3Z0v2v3:2w3(102z7e0L1M793#1h3b0x0O0Q0S0M04.

La fonction moyenne est donc valide. Pourtant l'appel moyenne(films, "Gross") renvoie un résultat faux !

En effet, pour certains films le revenu total est inconnu. Néanmoins, afin de proposer un fichier csv valide, sans valeurs manquantes, la valeur -1.0 a été ajoutée dans ce cas. C'est le cas par exemple pour le 19ème film du classement (« Les 400 coups » de François Truffaut) :

Python Console Session
>>> projection_multiple(films, ("Name", "Gross"))[18]
('The 400 Blows', -1.0)

Pouvez-vous calculer la moyenne des revenus générés par les films pour lesquels les revenus sont connus ?

Revenu moyen des films

Calculer le revenu moyen des films proposés. Il ne faut pas tenir compte des films pour lesquels cette valeur est inconnue (-1.0 dans le fichier).

Votre variable contenant la bonne valeur doit s'appeler moyenne_valide afin de pouvoir passer les tests avec succès.

Les fonctions somme et moyenne sont déjà chargées.

###(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 : 5/5

.128013r[S=0y9kP)_(gflumpinh1;ec/]2d3,G b-owtvas050D0y0M0O0t0p0P0H0z0p0O0P0P0e010M0t0s010406050P0q0r0r0O0b0g040d0K0p0q0*0K0u050A0;0?0^0`0/0s04051a131d0A1a0/0D0t0N0Y0!0$0(0!0u0n0q0O0n0y0J0s0g0M0v110H0v0t0n0v0p1F0v0M0-050T0I0p0y1m0#0%011E1G1I1G0M1O1Q1M0M0b1b1A0Y0}0P0s0O0u0(0C011S1o010o0V0y0u0O0r0y1M1.1:1^1U1{1Q1~200-0a0H0j0b0K0s0K0P0t100u0H0R1,0b0b0y0z2l13230u1b0A1A2y1(1*1)1N0D251p0t0u1}2i1M1j1l0Z1T2I2K0u0K2O1M0s2r1b2w2y2#0:1/2m2Q1_2U0b0@0p1M0O1D2r0o0(030l0l0z2V0y1I2T0K0J0C0h0J0w0-0w130O2$2)0.2(242+1U2-2/2;2?0y2^012`2|2~302L33351?040C3a3c1:3e2w2H013j0O2:1b2=0v2@2_2{2}0R3t2U3v0J0E0-0E3A2v3d1e2Z132O2B0D1*2G3h0(3Q211b3)1c3%2%143#3:2!2)0H0t0D0(2{2w3U373K3 41013P3s2J3u34361@290y423r3R4d3T4f463Z3E3.3G0-2r0N1}0q0P0l0N3I400y0P3!3C0H3f2*1n1U0K0-0e4H2x4J4s4M0(0,040c4R3}3g4V4u041}1(0y0y4!4T3~4t0i0-0o0K0b4.4K3F0u0-4*2r4-3`4I4{4t0K0L0-2J4`4U2R4(270r4G524S544%4=040t0o5a4:4%4}4)0u4+512%5b1_4X4Z5h4#4L5c0P3x010G2f0$014!5j5c4X0B5p4$5c4O04020n0M0x5S5E1_0r0t0-0f5N5y1U5Q4!0/5C4{404k444f3x052=5@4a4l2 4n325`4h1 4j5 3:3S633w1M0A3b5;5x3~5~432)3U3W476j606a6m65204k69626s2y3b5O2,0-0r0K0g1}2K4B4D0R5#3F5V4Q5C4/5T6C046E6G0u2K5,5q5P0-0m6Z6S3i4v0y4x0u4z6J1I0R5g6h6)4W0-0F6M4t5G0-5I5K0P5M5=5-6_040k5:5N0A3|3$0y2y3?2z3+132C7j0O1P7e3(1k3e0A0R0T0V0P04.

E. La meilleure année ?

Quelle année a vu se produire le plus de films présents dans ce classement ? Nous allons compter le nombre de films produits chaque année.

Une approche naïve consisterait à effectuer de nombreuses requêtes, une par année : « quels sont les films produits en 1900 ? », « quels sont les films produits en 1901 ? », etc.

Cette approche présente plusieurs inconvénients :

  • quelles sont les années à chercher ? On a fait l'hypothèse que les films ont été produits à partir de 1900 mais c'est vraisemblablement incorrect...

  • Python doit lire l'ensemble des données à chaque requête ! Donc 100 lectures des 517 films si l'on teste tout le XX-ème siècle...

Une approche plus efficace consiste à utiliser un dictionnaire dont les clés sont les années et les valeurs le nombre de films produits cette année-ci. On peut procéder ainsi :

  • initialement le dictionnaire est vide,
  • on parcourt l'ensemble des films. Pour chacun :
  • si son année de production n'est pas présente dans le dictionnaire, on l'ajoute (en tant que clé) avec la valeur 1 (c'est la première fois que l'on rencontre cette valeur)
  • si l'année est déjà dans le dictionnaire on incrémente simplement la valeur associée.
Films par années

Compléter le script ci-dessous permettant de compléter le dictionnaire annee_films associant à chaque année présente dans la liste des films le nombre de films produits cette année-ci.

###(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 : 5/5

.1280134r[S=0ykP)_5(Ogfl6umpinh17;e+cq/]2d3YR, b-owt:vas{j}050J0C0T0W0w0r0X0O0E0r0W0X0X0f010T0w0v010406050X0t0u0u0W0c0h040e0R0r0t0^0R0x0O020W0u0v0B0O0M0C120c0F0t0C0X050G0 1113150}0v04051A1t1D0G1A0}0J0w0V0-0/0;0?0/0x0p0t0W0p0C0Q0v0h0T0y1c0O0y0w0p0y0r1)0y0T0{050(0P0r0C1M0:0=011(1*1,1*0T1=1@1:0T0c1B1!0-180X0v0W0x0?0I011_1O010q0*0C0x1g0C1:2b2d2i1{2l1@2o0u2q040a0O0j0c0R0v0R0X0w1b1d0$290c0c0C0E2L1t2s0x1B0G1!2X2527261;0J2u1P0w0x2n2I1:1J1L0.1`2+2-0x0R2;1:0v2Q1B2V2X310~2c1d2?2j2`0c120r1:0W1%2Q0q0?030l0l0E2{0C1,2_0R0Q0K0g0Q0z0{0z1t0W32350|342t371{393b3d3f0C3h013j3l3n3p2.3s3u2g040I3z3B2d3D2V2*013I0W3c1B3e0y3g3i3k3m0$3S2`3U3s0{0K3Z2U3C0}3%3G0?3*3,053.3:3O3=3R2,3T3t0Q0b0{0b3~1u403E361N3H0R3a3+3K3/3M3;3Q3@4d3_4f0m0{0m4k3141353(454u493P3?3o4A3r4f0s0{0s4G4m424p444r3J3-3L3N4O4c3q3`0A0{0A4X3#1E2 1t2;2!0J272)43014P2:1K1B2~0C303C3 4?4P572t0w0J0?3k2V3`3w4(5e5g4y4Q4-4f3w0O2y0C5n4P3^4S3u5k3~4Z2@3)0{2d2-0C0l2w0u1s4l3#0O4n3(0R0{0f592W5Q5D2j0`040Y0!5W3D5O2W5R5m015h353`3W470O5.4b4z5q3V2h5u5w4,4e5}2X3A0}5+5c1d5_0l5i4f0K3K6a5x4R3`6e5t2p605{623{64683(0i0{0q4r5)5Y4J4 0x0{2n250C0C6y5R4 0R0S0{2,6I5Z3H6v0*5M5)6J4!015#0U5)66333%6a6c3u4h5l5f5/5o5y3`4h6l2z6n5p6p6,3Z0O6~6z3F6X6u040w0q6P6A6X6C046E2Q6H676W5E5#0d6V6Q0?0X3W010L0C13017k787h0{0H77715E6L0{2`0T7z4o7B6M740x7G4K5G0x5I5K6T5N6%7v5!0{6!676$586(6.5:2d3`4D6-6_6;4C5~6m6/6h5|0Q7+6}6 7{7g387O7Q5L7T7#7V1{7i7u7A7~7b0x6F7e7U88850{7j7f7l017n0{7p7r0c7t8j840?5#0H7y67707H2j5T045V8y7}1{0u0w3x6#87697%6b5;4T6f8O7?6p4U6@5v7=614B3u4U6r7|8k733o0X8d838f8u7X8L8s5d8O6*0Q4/7,8Z6o8#8{7:6^8~6`908|7`7{6~8G447 6G7R0r6U8@8A8g048i8e9j9c8a8c8M3(869i3(8m048o7s9s4 8v8x318z5S0{0D8E9F9b018I8K7Z6V0G5b4@564_531t0T4|9Y2%2Y0W1?9V0G4`1z6s4 2Q0u5K0W0i5J0y6e041l1n1p1r0O7Y331G3D1A0o1d2H0t2P0)0T0O0W0t0;0w0O1a0*0w8-0c0O0/0O6w0x2S0w1$055b2~0R0Z2R2T9S3n04a01E3D2;3(1Q1S1U1W1Y1!1$1}1+1-1/9.6X2w2n2p0{0j1Z1#7L7f55683!5,9T7$5n6c0z3v8S7-6i0Ka?5s5 947.a|2h4v4*5`954Sb16r9M7a5H9e817M6K5Ubf6X5#5%8?9n5^8_8Qa?5?3e6g8!b70Q2g8Xa_5qbrb24Nb5b0bx1:0G659s6)bq6q5@bu8 bw6ka~bFa`a?6kb34x8U4BbXbI3A9M736w0cbi5Ebb7P6Gb.8B7J6O8F8k7aayaAat1c9Bbj0{0nc1b/6S9g824?8k5#0Nb?1{9x9z8qc57W040ka14m9vbM7)a{4ga^a bWctbzcvbBcxbZ4a6:cw6|bJaF6 b*6N76b`8t5F04bc8.5P9M7C047Ece0?cVb_9Lb{9d5Jbe9v9C8=9Qcpbpcra?7_bt8Tbv3sc=928YbVcA4D4)b!c_cs7_cH99cJc%cQb;c)7Scj9k9m8/9ocPcRde8;049E3C9Gbg8DcY9N8J043yc.bncq0xc`0Q8%bPc^bRdC8WbUcEcA8WcC4+dHcsdEd6d8cO8+0+cS5,cbc-4HbLc:dBcs97c@bA4ea?4/cyc~d.91d1cDb#bw97dTd7bac(9f9hbnc,9ldldjdbe68vdt8C9Jdt9Odwbm58aD0$2Xa+9W0V5*0$0(0*0X04.

Il reste à déterminer l'année durant laquelle le plus de films ont été produits.

La meilleure année

On a chargé en mémoire le dictionnaire annee_films associant à chaque année le nombre de films produits cette année-ci.

Déterminer l'année (nommée annee_maxi) durant laquelle le plus de films ont été produits.

Pas d'égalité !

Une année sort du lot, il n'y a pas d'ex-aequo.

###(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 : 5/5

.128013N4r[S=0ykP)_5(Ogfl6umpinh17;ecq./x]2d3R, b-owt:vas050L0D0U0X0x0s0Y0P0E0s0X0Y0Y0g010U0x0w010406050Y0u0v0v0X0d0i040f0S0s0u0?0S0y0P020X0v0w0C0P0N0D100d0F0u0D0Y050H0}0 11130{0w04051y1r1B0H1y0{0L0x0W0+0-0/0;0-0y0q0u0X0q0D0R0w0i0U0z1a0P0z0x0q0z0s1%0z0U0_050$0Q0s0D1K0.0:011$1(1*1(0U1:1=1.0U0d1z1Y0+160Y0w0X0y0;0K011@1M010r0(0D0y1e0D1.292b2g1_2j1=2m0v2o040a0P0k0d0S0w0S0Y0x191b0!270d0d0D0E2J1r2q0y1z0H1Y2V2325241/0L2s1N0x0y2l2G1.1H1J0,1^2)2+0y0S2/1.0w2O1z2T2V2 0|2a1b2;2h2^0d100s1.0X1#2O0r0;030m0m0E2_0D1*2@0S0R0M0K0R0A0_0A1r0X30330`322r351_37393b3d0D3f013h3j3l3n2,3q3s2e040K3x3z2b3B2T2(013G0X3a1z3c0z3e3g3i3k0!3Q2^3S3q0_0M3X2S3A0{3#3E0;3(3*053,3.3M3:3P2*3R3r0R0c0_0c3|1s3~3C341L3F0S383)3I3-3K3/3O3=4b3@4d0n0_0n4i2 3 333$434s473N3;3m4y3p4d0t0_0t4E4k404n424p3H3+3J3L4M4a3o3^0B0_0B4V3Z1C2}1r2/2Y0L252%41014N2.1I1z2|0D2~3A3}4;4N552r0x0L0;3i2T3^3u4$5c5e4w4O4+4d3u0P2w0D5l4N3?4Q3s5i3|4X2=3%0_2b2+0D0m100I0x572U0P4l3$0S0_0g5M045O5B2h0j0E0_0b1a0D5U0{4j4;3#5k015f333^3U450P5.494x5o3T2f5s5u4*4c5}2V3y5P4}0y0_5J5L5+5N664Y015R045T6c5V6e5C0v0x0_0h5)5U5P5_0m5g4d0M3I6v5v4P3^6z5r2n605{623_643B6k6u5d5/6w5;4d4f5j6Q5`5n6K4f6G2x6I6Z4z3s6V5A4H4}0j0_0r4p5U5W6.6f68045F0D5(6k6^3D6f0S0T0_2*6@6m365E0y5G0m2u0v1q6O5X1_0^040V6s7i4H6v6x3s4B6W6(5w3^4B6$5t6R6C5|0R7u3X0P7I714m5C6:040x0r787j427b7d7f7h317S017l0e6t7Z6{6}6 7Y6_5C7l0J7R7-2h6h020q0U0C7;725C6{6a7%7=7k0_7n6k5*7,5b6X6S2b3^4S7v7C616*0R4S7A7w6D4R1.0H3y7J8s7K4I690X5K7|7L7?5S8z8v6|7c6~7e0(7g817}2h7#8L8A3F7U6~8P3$7/7o881b7r6T3s4-8f6Y7x4d4-8l8g6J8i8%7H8t7I798R8F7d80708^0;6h6j2 8u678S7+4k6O0H594=544@511r0U4`9f2#2W0X1;9c0H4^1x5a8Q0;2O0v7e0X0j5H0z6z041j1l1n1p0P85311E3B1y0p1b2F0u2N0%0U0P0X0u0/0x0P2a0d3k9Q0x0d0P1=0*051k7O0U1k7h9.0P0L0u9@0x2Q0x1a2m9(1?851F0Z1I3$1O1Q1S1U1W1Y1!1{1)1+1-9r3$2u2l2n0_0k1X1Z0y6t539r3Y2U059a5-8a6x0M3t6A8a7D4caC5q5 8.6)4QaI2f4t4(8)8naO6M8~5D8`8H8|92aW908D6/5!045$2+8X56az5laB0R5?3c6B8haNa?5~6HaL8*aC2e4%4vaG4zb18p657(8w8y8}7Za%bd820;6o6qa.5,7qaA6TaC9B5@a_8/a{6FaKaS5obqaP4LbyaH6L3X87a/bna;bp4eaE8mbzbM8-bDb6bQaQb4a`3qaC6,8qai6/6;6?bg8M8_7*8U4}7l0Oa(6`0_2^0v0Q2Ob=5C7476arb*9saX7*8I0s8K7pb+8 0_0Gb.b?9/9;cd7.0_0o0l9I978Y5^bo8c0MaC7Ga^aFbXcs7Fa}6%a aTczb3485mb0cz6M8saW7N7Pb|7a04b^b`963Z93730_7^7`cP8_a!bIc97!84blawa:6Ra=8ebscwbubY8jcA7BbSa{8kbVcGb5c}b85V8?cW7~bb6ba#be8Cc18EcSb{868U8!craC8;cvbObE8,bxcHcD8,c 4)c@cy8;b#d5d6cQc4c%cVa$dcdabhc38GcU2UbH4;993l2Vat9d0W6N0!0$0(0Y04.

F. Le meilleur genre ?

Quel genre de film est cité le plus de fois ? Facile, il suffit de compter les apparitions de chaque genre comme l'on vient de compter les années.

Mais les genres sont mal présentés : chaque film est associé à un, deux ou trois genres, si besoin séparés par des virgules, avec des espaces derrière les virgules...

Python Console Session
>>> films[3]["Genres"]
'Drama'
>>> films[4]["Genres"]
'Crime, Drama'
>>> films[5]["Genres"]
'Drama, Romance, War'
Pouvez-vous déterminer le genre le plus présent ?

Le meilleur genre

Déterminer le genre le plus représenté dans les films.

La variable contenant ce genre sera nommée meilleur_genre

Astuce

On rappelle que la méthode str.split découpe une chaîne de caractères à chaque apparition de l'argument et renvoie la liste des chaînes obtenues.

Par exemple "31/5/2007".split("/") renvoie ['31', '5', '2007'].

###(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 : 5/5

.128013N4r[S=0y9kP)_5(gf8l6umpinh17;e+c./x]2d3,G b-owt:vas{j}050M0E0V0Y0y0t0Z0Q0G0t0Y0Z0Z0g010V0y0x010406050Z0v0w0w0Y0d0i040f0T0t0v0`0T0z050I111315170 0x04051n1g1q0I1n0 0M0y0X0/0;0?0^0;0z0q0v0Y0q0E0S0x0i0V0A1e0Q0A0y0q0A0t1S0A0V0}050*0R0t0E1z0=0@011R1T1V1T0V1#1%1Z0V0d1o1N0/1a0Z0x0Y0z0^0L011)1B010r0,0E0z0Y0w0E1Z1~20251+281%2b2d0}0a0Q0l0d0T0x0T0Z0y1d0z0Q0(1|0d0d0E0G2y1g2g0z1o0I1N2L1^1`1_1!0M2i1C0y0z2a2v1Z1w1y0:1*2V2X0z0T2#1Z0x2E1o2J2L2=101 2z2%262+0d140t1Z0Y1Q2E0r0^030n0n0G2,0E1V2*0T0S0N0o0S0B0}0Q0B1g0Y2?2_0~2^2h2{1+2}2 31330E350137393b3d2Y3g3i23040Q0L3o3q203s2J2U013x0Y301o320A3436383a0(3H2+3J3g3l0N3P2I3r0 3T3v0^3W3Y053!3$3D3(3G2W3I3h0S0c3l0c3;1h3?3t2`1A3w0T2~3X3z3#3B3%3F3*433,450o3l0o4a2=3@2_3U3{4k3 3E3)3c4q3f450u3l0u4w4c3^4f3`4h3y3Z3A3C4E423e3-0C3l0C4N3R4y3u4Q3V4S4j4U4l4W414p4Z450s3l0s4(2K4*4e2(4-4i3|3~4m404o4G4^3i0j3l0j4}3S4z3_524T3}4V4n4F3+4I3i0B0h0}5s5f4 4A4.545m575o4H3-0B3k045G5w4d5y534C564X4@445r3L0B3O0I3p3=4)5L5i4B4:4D4?595S3j0N5u3:5X3Q4~5#4,5%5l4;5n4Y5,0B475I495;5Z2K1r2:1g2#2O0M1`2T5i4F2!1x1o2/0E2;3r641o4F6l2h0y0M0^382J5F3z6s6u585p6x0Q2m0E6A5D5a3j1Z634P510z0}1w3a0n1I0z2E0Z6n0Q5@510T0}0g6Y6!260|040!0$6n0 4b3R5L6z016v2_3-3L5l6^5*6C45236E2c6G6_6B5E726L5Y6N2|0}2d0,1%0v0d6T2a2E6)7d1+6$046(6=2K6Z7p0^0k0G0}0b1e0E6:6n6@6t776w455.4U6 786J5.742d6H5}4r3i7M3;7x3V7f0Y0J0y7o5h4,7r7t2=7w7+510w0y0}0h7F7u6q2z7O7K3i606~7I707980246F7U5R7W467b3s7{7H6A7 0S4t7N837P5,4t7S76846J8k7Z7;260k0}0r4h7*4+6O0}6U6W8C50260T0U0}2W8I4A0}2/0T0#2F2H8f7!6,0p7G7!6P042k0w6X8X8w1+6,0O8P5i0Z3L010P7m0E0Z018#8-0^6,0m0W7`2@3T7~6{4J6y8m6I5,4K8q895+8b4K2L3p0Q9m7:8D7e040Z0T0v0Z7l6V8{8;7,6%9z8E048G9y8,9p7q0}0H8~9I3`0}1~1V0V9M8J8.0}8!9H9U0^8?0}010O0Q8}9Y3U91946m968m8i4#8l9g713i4#9f779c8b9?3P9n9o9Z018y8(8B7{a38Q9E8`9C8K8M048Oa96*3w9P9t9v9F8+958 016,937{6;ar6r9;983i4`9@9}7V5q0S4`9|8s5,aDa1a29nak7y8N0raealac9xaV0^8L0}2+9Saj7!a#ah1fa)as8%6R0T9w8H9+5iau9.6?9:8haB0S5caEaL8b5caK8nb48daPbaaa5$6Q0y6Sap9T9,0}0ebibdaX7na^4,6,0KaZ017-bu7?5ua{65a}7Ja 5s9a9^853j5tb69~aHbF9k3MbbaRa50}3c0Z7Ebq51a`awbi97205F5H82bH6J5G8775b,5~b*5;bbaPbSa:bfa=bhbY6+bkbm5^8Fadb 9V04bta.9Nbv0}0F7.3rbc4,by5IbA7|0Qb%0z5F6}327ObMcqb/7TaF8abN6}b@bR7!a60yaUcaa4b{bg8`aq9/as6,blc69ObobXaya4bsbu7r020q0V0Dbu8%147(c2bZ0}av4xb$aAb(450B7Ycs9baG5F7R88cy9hbN7YcCb^9mb`7f0E7h0E7ja?cVcgbSbwcIab9Fcl8gbDc@5r81c{b;8b5 cw8rb7bN81d5d6d804c+7)dj5idi7/dDa;decNa|cPc1cS7#dEda0t7i7kdldScYb#8f0I6p666k686h1g0V6bd.2R2M0Y1$d+0I696;0(0*0,0Z04.