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

.1280131w ;5(=g8upyt_hd:)-rP,/n3c2amso6bevi7k9lfS.[]q04050q0I0n0C0K0O0E0d0A0O0C0E0E0h010n0K0l010406050E0k0D0D0C0u0m040Q0F0O0k0;0F0y050x0{0}0 110_0l04051h1a1k0x1h0_0q0K0J0)0+0-0/0+0y0i0k0C0i0I0t0l0m0n0p180d0p0K0i0p0O1M0p0n0@050!0H0O0I1t0,0.011L1N1P1N0n1V1X1T0n0u1i1H0)140E0l0C0y0/0B011Z1v010P0$0I0y0C0D0I1T1^1`1 1#221X25270@0a0d0v0u0F0l0F0E0K170y0d0Y1?0u0u0I0A2s1a2a0y1i0x1H2F1/1;1:1U0q2c1w0K0y242p1T1q1s0*1!2P2R0y0F2V1T0l2y1i2D2F2,0`1_2t2X202#0u0~0O1T0C1K2y0P0/030o0o0A2$0I1P2!0F0t0b3a0@0b1a0C2-2:0^2/2b2=1#2@2_2{2}0I2 01313335372S3a0t1}040B3f3h1`3j2D2O013o0C2`1i2|0p2~3032340Y3y2#3A0z0@0z3F2C3i0_3J3m0/3M3O053Q3S3u3U3x2Q3z3b0W0@0W3%1b3)3k2;1u3n0F2^3N3q3R3s3T3w3W3_3Y3b0f0@0f3 2,3*2:3K3.493=3v3V364f393b0G0@0G4l413+443-463p3P3r3t4t3^383A0L0@0L4C3H4n3l4F3L4H484J4a4L3@4e4O3b0j0@0j4T2E4V432Y4Y473/3;4b3?4d4v4*0t0N0@0N4/2F2)0I2F2V2I0q1;2N3,014u2U1r1i562+3i3(3H054u5l2b0K0q0/322D3A0b3q5t5v4}3X4x3c0d2g0I5C4u5E5y1T0x3g424p0@562#0D0E5n2E0d5R5e0F0@0h5Y045!4E4?0?040S0T5*0_405o3J5B015w2:3A3C3:0d5{4(4~3`3B1~5I5K4N66605P5r4=200M0@0c2r0p5*5,4o5e0y0H0@2n245*5#4X5/0g6w5-2?0@2e0I6B6p4X5%045)5^2E6x4?0E3C020U0k0F0n0e250n0B0V0B0b0R0A0E0J6T6V6X6H4W5.0@0w6n6P6D040D356:6g1#6K6M2.6C1#6R0@6-6W0e0u786/6N6f3K5/6@7e6o6;6`243V2Q0i6~3K717r5e76047c0e160P0t0j7y7u6y0@0s6^740/6i040,7J6I4?0y6E0K0A1L0I0u7F6=040r5?7r630o5x3b3!4J7)5L4w3Z68265J5|5D7;7,5O3g0d7 7k6 3-7T7V0K7X7Z206K0R883n0@2y0C0q3y8c0/6z7I7e5@734o7)7+0t3|7.5u7_7:4 3|5H7@6a4)668u3F80813K7M0P467P7l8d041)2R8O82010F0c0@2Q8U5S042285877e6_1#5/7$8n7(8w5}1`3A4i8v8D654g0t4i8B278{5M4h7}5+8I808,838R1M2R0o2)2n2y8#5$5(9i4X7S9b0i8T8+7K8W0@8b9r7Q6`0E1/0=8j018l7%9w5s8=7*5~4y5A9I8y664z907^64930t4z2F7~977 993L0@0J3N0I0k0u5X7j9#7t9.9s9n8S0I9e2m569C8a9C9n1^1P0n9C6z9C7w7y0e7E9G8V5/8m4m8;5C8s4Q8`8x6b8}4Q9R927{0tai8H9Z8J6q9%9)9+9-8p8P8k0@0S9C0D0K0@3Eaa7g0@5=9;9x709kaPaC3L6s042Qa2aL5ea4a!9max1Xaza3aEaGaI3Da,040Tad41aL8r9K7C9Map4 4,aoak8E8}4,9X969Z9#9n9(a*9,a;aFa%4?aH3#a;aO2,av6JaSbmb9aWaYa;6Abg6`bb9*bdbw8-a-bB0/bi043$bE9DaNa@4Uaf7_8s51aj9Taq51b1bT4 bRatb89=5T2y5VaA5m9s9}bJ9n0C0l0l240qbu9~a)bzb*5_aQaD04bM4:6w0x5q1l2*1a591a0n5bca2L2G0C1W57c85i5@0Y0!0$0E04.
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

.1280131w ;5(=g8upyt_hd:)-rP,/n3c2amso6bevi7kRlfS.[]q0D4050q0I0n0C0K0O0E0d0A0O0C0E0E0h010n0K0l010406050E0k0D0D0C0u0m040Q0F0O0k0=0F0y050x0|0~10120`0l04051i1b1l0x1i0`0q0K0J0*0,0.0:0,0y0i0k0C0i0I0t0l0m0n0p190d0p0K0i0p0O1N0p0n0^050#0H0O0I1u0-0/011M1O1Q1O0n1W1Y1U0n0u1j1I0*150E0l0C0y0:0B011!1w010P0%0I0y0C0D0I1U1_1{201$231Y26280^0a0d0v0u0F0l0F0E0K180y0d0Z1@0u0u0I0A2t1b2b0y1j0x1I2G1:1=1;1V0q2d1x0K0y252q1U1r1t0+1#2Q2S0y0F2W1U0l2z1j2E2G2-0{1`2u2Y212$0u0 0O1U0C1L2z0P0:030o0o0A2%0I1Q2#0F0t0B0t0b0^0b1b0C2.2;0_2:2c2?1$2^2`2|2~0I3001323436382T3b3b0^0B3h3j1{3l2E2P013q0C2{1j2}0p2 3133350Z3A2$3C0z0^0z3G2D3k0`3K3o0:3N3P053R3T3w3V3z2R3B3c0X0^0X3(1c3*3m2=1v3p0F2_3O3s3S3u3U3y3X3`3Z3c0f0^0f402-3+2;3L3/4a3?3x3W374g3a3c0G0^0G4m423,453.473r3Q3t3v4u3_393C0L0^0L4D3I4o3n4G3M4I494K4b4M3^4f4P3c0j0^0j4U2F1m2+1b2W2J0q1=2O3-014v2V1s1j2*0I2,3k3)3I054v552c0K0q0:332E3C3e4K5d5f4e4w4+3d1 2h0I5m4v3Y4y5q2G3i433L0M0y0^0K0D2p0u0n574;4F2Z010c0^0d5L5b445O0y5E040A0E0J5T0`41583K5l015g2;3C1~5k5e5-5n5w5:5r275t5@5v4x5`5z5U4q0^532$0D0E5T5S5N210F0^0h6a5B4}0@040S0T5%5T5B5,5.1{3!3s6r5^603c3#0d5s5u4O3{0t3#626i4Y0M0^0c2s0p6h6c3p0H0^2o256p6R0:6k0g6X4p4}5Y2f0I6$4X5O6e046g5)5M6%4Y0E5;020U0k0F0n0e260n0B0V0B0b0R5!0J6{6}6 6,5V216k0w6Q6@5W0^0D367d3L6/6;2/6Y016_0^7a6~0e0u7x7c6=636j0^7h7D6b7j2@0^253W2R0i7o4}7q7R6^6`6|7y170P0t0j7B0e7U5O6k0s7i6-216L040-7-7e3p0^230A1M0I0u7)7f0^0r6o7D6q5?6s0y3C3}5=6D4*6F3}6B5|8c5o8e1U0x3i0d8o7J7.7^041Y2B0I0k7~7I6J6.6f7?645Z5#7 1$6/0R8H3.0^0W0K2B0N0I0C0Z8y7s7K1$6!8L3M7_8P7|8V567t7g8D6(0^4f0D2s7}8!7T847t7v047%0e7%8!7+838W5c860o5h4i6v955 5p4j8g288i5_98628p8q7@0:7:0P478-4Y5Y251:0I6+8z7t0F5Q042R9r7k8t2A0n8w8)5*8X6Z81928*4p6w970t4A8b5~6E4h9U5{9f9X8d9Z9V3G9k9k8A7L049u2z9x939m016k0S8!8{7%1{2S0I8 8_9M9_0^6n9ya48^2-9l4q6T9C0y5Ka38r9N046#ai9^9tag9=900^9{an3L9}7X6 9 9wa29@3L6k0T7,7D5(aD9S5/3c4R9W4)8j9Z4R9e5}aQ9h0taO9+9,8o9.8s9;9was6l9|7W7b700F0D0H2zaC9Qaja504a7aba%0:aa3kac6(ae2RahaD7Fal8!ap9v9?a_9^9`a-7waya:a=a@bka+aG9P9L945m9T4-aP6x5p4-aU9g6y7#8l8na#b39s652z6769av7S0^8KbObJ7;0l0l250qa+amb8bTa)bebsbg0^aH4n6p0x5a4=544@511b0n4`b^2M2H0C1Xb=0x4^5(0Z0#0%0E04.

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

.1280131w éI;5(=g8upyOFt_hdNà)-rP/nL3c2Eamso6bCevi7k9lfS[q]0D4A050u0P0r0I0R0V0K0d0F0V0I0K0K0j010r0R0n010406050K0m0J0J0I0z0o040X0L0V0m0|0L0C050B13151719110n04051p1i1s0B1p110u0R0Q0;0?0^0`0?0C0k0m0I0k0P0y0n0o0r0t1g0d0t0R0k0t0V1U0t0r0 050,0N0V0P1B0@0_011T1V1X1V0r1%1)1#0r0z1q1P0;1c0K0n0I0C0`0G011+1D010W0.0P0C0I0J0P1#2022271-2a1)2d2f0 0a0d0A0z0L0n0L0K0R1f0C0d0*1~0z0z0P0F2A1i2i0C1q0B1P2N1`1|1{1$0u2k1E0R0C2c2x1#1y1A0=1,2X2Z0C0L2%1#0n2G1q2L2N2@12212B2)282-0z160V1#0I1S2G0W0`030s0s0F2.0P1X2,0L0y0M0y0b0 0d0b1i0I2^2{102`2j2}1-2 3133350P3701393b3d3f2!3i0y25040d0G3p3r223t2L2W013y0I321q340t36383a3c0*3I2-3K0E3m0E3Q2K3s113U3w0`3X3Z053#3%3E3)3H2Y3J3j0%3m0%3=1j3@3u2|1C3x0L303Y3A3$3C3(3G3+443-3j0h3m0h4a2@3^2{3V3|4k403F3*3e4q3h3j0M3m0M4w4c3_4f3{4h3z3!3B3D4E433g3K0S3m0S4N3S4y3v4Q3W4S4j4U4l4W424p4Z3j0l3m0l4(2M4*4e2*4-4i3}3 4m414o4G4^0y0U3m0U4}3T4z3`524T3~4V4n4F3,4I3k0#0 0b0#5f4 4A4.545m575o4H3K0b3l045G5w4d5y534C564X4@453k3M0b3P0B3q3?4)5L5i4B4:4D4?595S0b3/5I3;5X3R4~5#4,5%5l4;5n4Y5,475I495;5Z5?4P515_554=585p5F4t5I4v624b5!652~5z5O695D5a0b4K5I4M6g4x5@666l5(5P5*6b3j0b4#5I4%6u4O5h5^6y5`5)6a5E6D4`5I4|6I6i6K6x5N6z6n5}4r3k5c5I5e6V646X6k6Z6N6A6P5a0G5s046^5K6j4g6:685|5R6%0G5H746|6.6~5k705C6$5q0G3M7f774+6Y7a5B5Q5+735.0G5:5Y6h6-7j6/7l5{7c727e5 0G617t6v6}4R6 7m6B6Q3L6d0G6f7G6J7w794/6;6#7B3K0G6r7#7i507x7W7b7n6C3L6F0G6H7S6W7U7J7y6O6o5S0G6S7~7(5M7`6=7|736)0G6+7?7v7)7V5A7z7-7N0E6_8i815$6M7,7M5a0E5H8r8l6L7K8f8p5S0E3M8A8u7k7+7L6?8z5.0E7s5=5g7^5j8F8x8H6%0E5 8U8D7*8e7{7d3.6d0E7R8M5x8m8w8!7Z3j0E6r8;8X8d6m717o5q0E6F8}8@7_8Q8.8{3.6S0E6U8a8N8c918Z848#8:6)0E898M1t2=1i2%2Q0u1|2V5i4F2$1z1q2;0P2?3s631q4F9A2j0R0u0`3a2L5F3A9H9J8S5q3l0d2o0P9P859R1#627I010F5H030d0I5R0d0P0K0r0d0?9;0R9/1*2D0r0L1e9.9;9~2c1`0e9~3c2F9.2w0C0u229:0I0m0d2;0e2-0J0d020Z0m0L0r0g0(5Ralanap9C117u9F2B9O019K2{7!9N9IaC9QaF9T2e9VaI9XaF2N5Y9#0C0 9+5+9C0d6w280L0 0jaYa!1-0~040Y9Ca*3{0 a12G0Pa)9#0T0 0W4ha_78a;04a?0Pa^ayaZ9#0L0c0 2Ya 8OaU049yai0Kbd9b01a{040R0Wbk4Aa=0C1`b4a/9#a,a.aya:010J0R5tbxb001a,0!br5ia$040ja(b6bC0K3Mataoaq0$0H0D0f0v0HbWavbBby0 bLayax2_3UaBaD223.aG9W9f0y3/aL2fb{8/b}9Z3qb:9Bb=aHb@0C3K5 5lb?aJ46269Uc194chaRaz3V9%0 9)222Z0P0s6^0#0S9-9/9;341X9^2C1*9{9}0:1)0:a?a30:a52G201gaabu0d0w9;02039i0gcta33O0#cyawbH9Gc90s9L4sb`aOb|4tb aN8y6%6d3=aTaV0Cd2cvcx6H2@b7bIbObRd7bCbzc-blbfb3b5dca`a|a~bSd0b2bua@bM4,b9bb1hdobIbfbh0L0Jbjdy8Obnbpdt66btbvdjc7bIdeb+bIbE0 5Wb;dPb-dJa#a%db3sd88OdT6`c*d6dO8ObKc,dRc.9Pc;3ic?c|5q4Kc`ck7.6r3Qc63S5Lcfd^6Fcec/aP3j4#d~c@c2e89!bIcq049)2mcLcA9:9=cE0r9_cH9|etcKa0drcO2EcRa8cU9:cX0*0:agbi0d0W0ebE0C2YdE6vd=aAc/d^6Se9d 7N4`eed{3KeYeibea|0.cLdZ1-dae:0`dQdWe,dqdMe?bmdm0ze}dhdrbwdFbldvbodxdkdz0 dBdDe}dHbqf5bse{dseU3Ve^d.bld*5vfm5id:fibNd#e}bU0 b)0g0qfCdffndYb/fGe6aE3j6)eZefcl5bciaMe!5afO5;e32Me5eWfM5rd`cgf(e%f*5uc4co9t9(1~0m0z0rcMcBer9@etcG0dcIex9 cMeAa44heDcTabd;e_eVd@f%5Gf)eb3k9ScjfQ7.ggcnbCek9)eH9~eKdCcP9|f^0:0i0E9 1?cR0d9|0d0J0LeR0xgbfp0dfLb^6D3MfPe(gSfTc0gm7N5Vf/bCbf3cf@f_e}e=fw4,foe4dpdiffe f1dLflfa8Of7bcg.dKbg2Gbig@bofhg|dg0N0 2nfGfu0 0ihd5^g`f4gcfHa-hh51d*3oftg/b-gMh0d!04020Vapd$3Sd(fqbF045:hlhe04b.eThlgQcb6D5.gUf-b~glgV3khSfYfKf$gR3kcd34cfgi0b47f,h,cde+blgr9;1g0kf`eqcDf}eug0ew9~eocNg6a6cSa9gafJfmhP6cghb|0bc_hWf-c~h=cpf=gteJ0zahgwh^1GgA9/0z0R2I0P2fcV0n1d0:2D5ugDbv0KhvhNgOic6De1h*eaifd}iih,e1il5$hbh_eSd%bCg-h8hmbAhJhifkhki%dl04a}f0hw3xhjdNhDi(baf8g_h22!fei_0`fgf1ha04hchs51a,hgjc2~i{ho28g:f!9#hqjja+hug,fB0kb*i*5ihqfsi-jdfIiMg;4ziO3ke8iRfV5,ediVifehc5h#geh%0beYjJgZ6pe$jNc2jUg$9#h@eQ3c1Ccw0#jUepcC9?cF9`i1eyg4a2i5g8i8bugNjEd?aId^0bfOjWhXk5gXc{f-fXaSejf=adafiqaiakambX0viy1c0@fFiahOh$hQ3L6_hTgi6^kajK73kyiY4,h@2wf@cYc!0Uc$d2c(6^jUk0jmjFkv7!5Hkzb|74kCjX7}kYkGh1j*kq0Kj-kSj501i)i;dXhnjgi`i/i|2MhE3Vbni@j1g?k;g~f9k@e`fdi$i}i=dIk;f2e|k`e@0 i,gOjxhGhrjAjkjCl8f6fyk;fAhykmap0v0f0O0p0D0(0Xksjwdui 220ul3f3k}f:htk_lq1-d*dVlmlShMlt3VdahCk~bClWj.6UlUljhLkTcojG7fiec2l@h/k!gTh!ibkW3j7rl^fRm2l{l_hZke8Oh@b30s0h0s0+0s5u0sbE0V1)j:f|j?evcJg39-g5gxi6eEi9jDkUk2ca7!h)gPiSl_h.j!m4h;m9h?f=0u1g0C0ej`2G0d0h0dc*0#9-9:iHmYeMgK0:130z0d0m2Z9*kP1*0i2Y0=0mcKcZc#m.m!kLc#adbviL4cl jSkw7Qm37.n8m6m4ikmMfjmcmemgmimk1)jsbPe}jllRh1l4lJ51l1dnnujhk|g,i g nyk{lah5lenE0`d*memYnnhzhBlOlhl.bJlkjpnKhGhIlYjBl:l5fBhA0gl(3Nl*lo0#0snNlinUn$mzl=m03LiQmFkD7eiUfUk%73iXjQn5k3f%7;n97No9ncnajPnr28h@encvmim%9.h|j=f~j@mri3mueCa7g9j ktiNn`7~oa6@jZo1hXoCgpj(incGipirdDeMeO2YeRl;f#n67!k6n}o27e5codobkdog1-h@mPkPeJiEf m$c*m(9@0dm+m-m/c%m=m@iEn35!o6mC8:kyk7f*8ik$hXp9oJfbi?e.okn/n;nJk=a%npnVn=lgg{l#5inwi^pkpqi:lcd9nCl7pzl9h3gwnHh7psi.ntn!lrlTpMlVhGjzpPl/l!pDlubPn+k 5ilxfCfElz0gnBd1lNlfjin=nqn-0 nZk1blfvpkbO02jun*e}jyn:c*nWn?pV5?p3c:f%8roD8zgkoGp8k)o5kuoW8:gTp7gi8Apap8l}nff;cr1~0J2w0Ka0f{h}mpi0osezj{mvj}eFoUc8qkb}hSqnb|8Kqqqom8o*0`h@iokioOgxqx2xmSqLkVqN8Uqc8TmIqfqomLqW9$f=0Ogukjis3cbu0R2c2,9:m}1`0-9:0um{kNm.0R1gq*mBq9h%8(q.8|ihq;qRneq@g(dCqy9.nnpZddponTpxlQp!4,punRprpWl$pBj1nGk;j7lwbVp)0ylIpJ51l6rEpymAp_rxpTbDloq4bKq63tq8d^8;rj3.o0gYpbo4r*qjo7rhjIoZpbjMrmc28}j%kfqv0I0s0*0N1emnqCoqmqg2otqHovi7qKozp^r|rgkw97r.8:oFr;p8e*qtkHoLeIq!eL0u0es80,bueJ17j;1)gE1*fC0(rRp2r^p4b}oYh+qRo$mJ7.9is2e`s5s71erupnpOsliZnArLg^p.s/p{rIs=rKpkrMpwp/nTp;jnr$p:b-lls-4,frr%lsrGfxpYfzrOauaqsPrXhmr)fZ2N9E9l9z9n9w1i0r9qtt2T2O0I1(tq0B9oax0*0,0.0K04.
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

.128013;(gupxF_dN)rPn32Ems6ei7k904A1w éI5=8yOthà-/LcaobCvlfS[q]D050j0v0N0U0w0Z0t0F0T0Z0U0t0t0J010N0w0f010406050t0e0s0s0U0m0L040#0V0Z0e0}0V0o050R1416181a120f04051q1j1t0R1q120j0w0Y0=0@0_0{0@0o0d0e0U0d0v0Q0f0L0N0O1h0F0O0w0d0O0Z1V0O0N10050-0W0Z0v1C0^0`011U1W1Y1W0N1(1*1$0N0m1r1Q0=1d0t0f0U0o0{0q011,1E010!0/0v0o0U0s0v1$2123281.2b1*2e2g100a0F0n0m0V0f0V0t0w1g0o0F0+1 0m0m0v0T2B1j2j0o1r0R1Q2O1{1}1|1%0j2l1F0w0o2d2y1$1z1B0?1-2Y2!0o0V2(1$0f2H1r2M2O2^13222C2*292.0m170Z1$0U1T2H0!0{030i0i0T2/0v1Y2-0V0Q0D0A3j100F0D1j0U2_2|112{2k2~1.303234360v38013a3c3e3g2#3j3l26040F0q3q3s233u2M2X013z0U331r350O37393b3d0+3J2.3L0Q0p3n0p3R2L3t123V3x0{3Y3!053$3(3F3*3I2Z3K3k0Q0B3n0B3@1k3_3v2}1D3y0V313Z3B3%3D3)3H3,463.480I3n0I4d2^3`2|3W3~4n423G3+3f4t3i480u3n0u4z4f3{4i3}4k3A3#3C3E4H453h3/0x3n0x4Q3T4B3w4T3X4V4m4X4o4Z444s4$480K3n0K4+2N4-4h2+4:4l3 414p434r4J4{3l0z3n0z503U4C3|554W404Y4q4I3-4L3l3k103k5i524D4;575p5a5r4K3/0D0D5w3p0R3r3^4,4g5A564F594!4`475u3N0D3Q5M3S515Q5l4E4?4G4_5c5X3j3;040D3?5$5O5(4S545+5o4@5q4#5:0D4a5?4c5_4e5P5|2 5B5T4^5b5s5H4w5?4y684A5)4/5~586f5F5d3j4N5?4P6m4R5k6p6d5,5U5.6h480D4(5?4*6z6a6B5}6D5 5-6g5G6I4}5?4 6N5{6P6c5S6E6s624u5u5f5?5h6!5j4.6Q6(6S6F6U6u0q0A106}5y6o6@5n6r615W6,0Q0q5J047a716b4j6^755E6+5t793N0q5#5N696#6?6%745D5V5/780q5=7A7e6$7g7v607j777l0q657L7D7t7F4=6_6*7J3/0q6j7W7O537u7R7i7x6H3M6w0q6y7q6n7f4U7h7w6G6V3M6K0q6M7.6A7P7;7G6T6t5:0q6X857Z5R816`837z6.0q6:7}6O7 5m7$7?6{5:0p6~048p885*6R7%7@6u0p7b8z8t6C7=7H7(7^3:3N0p7p5%6=7!7Q5C8F8x8o5=0p5^8h7s8O808l8R8n780p658)8C738#827k3/0p6j8=8,7#8Q8/7U480p6w8~8^8P6e767y7l0p6K97918!8`8b8:8}6X0p6Z8X8N898.9d8|3l0p6.9q5i1u2?1j2(2R0j1}2W5l4I2%1A1r2=0v2@3t5`1r4I9J2k0w0j0{3b2M5H3B9Q9S8%7l5J0F2p0v9Y8c9!1$5_7:010T7b030F0U5W0F0v0t0N0F0@9}0w9{1+2E0N0V1f9`9}a72d1{0Ga73d2G9`2x0o0j239|0U0e0F2=0G2.0s0F020%0e0V0N0b0C5Wauaway9L127r9O2C9X019T2|7V9W9RaL9ZaO9$2f9(aR9*aO2O5N9.0o109@5/9L0F72290V100Ja+a-1.0 040$9La?3}10aa2H0va=9.0y100!4kb27Ea}04a 0vb1aHa,9.0V0E102Zb88ja%049Har0tbm8Z01b4040w0!bt4Da~0o1{bda{9.a^a`aHa|010t3NaCax0bbq0V0sbPaEbKbH100(bA5la/040Ja;bfbLbN10bVaz0)0r0S0H0k0rb/bGb901a^b!aHaG2`3VaKaM238;aP9)9e9p279%c99o3:9,3rc19Kc3aQc50o3/655oc4aS484aaU2gce95cpchaI3W9:109=232!0v0i6}0A0x9_9{9}351Ya12D1+a4a60;1*0;a ac0;ae2H211hajbD0F0P9}02039q0bcHac3P0AcMaFb{9Pcm0i9U4vc8aXca0Q4wcwaW8S786j3@a$a(0odhcJcL6M2^bgb|b%b*dmbLbIc~bubobcbedrb3b5b7b+dfbbbDb0b#4/bibk1idDb|bobS0sbsdN8jbwbydI5}bCbEdyckb|dtbXb|b-04b/cHbdb`d)8jb~dXa.a:dq3tdn8j0s0w6 c{dld$d=bZc}d;aJd0d23l6wcrd0aY4MccaVcy7)0Qec5$cj3T5Qcsea0Q6Kedej8H4(d9ew6ueu9-b|cE049=2ncZcO9|9~cS0Na2cVa5eOcYa9dGc$2Fc)ahc,9|c/0+0;apbr0F0!0Gd~0o2ZdS6ne70FeraN4|d4db7l4}ezd5cf6XdedOb50/cZd@1.dpf80{d(c2f4dFd!fbbvdB0mfidwdGbFdTbudKbxdMdzffdQe;d{bLdVbzfqbBfgdHe?5lfde3bud+b/0t0v0g0vd:fee404b fv8jdpd`3Td|fLbOavbQ0hfSfK3Wd?c0due@e9e_5ee{ctf^e e|3/6.3Reo2Neqf?c66I8qevf0czg6ehcxg9ek5va!cC9C9;1 0e0m0Nc!cPeMa0eOcU0FcWeSa8c!eVad4keYc+ake6fTe89Yes5If_ef5u9#cdge8HgLghbLeF9=e$a7e)bTc%a5gn0;0c0pa81@c)0Fa50F0s0Ve:0lgGf-e^g55YgMd65!gcdaf`3j3Nf3bn103dgmgofifafDfI10bJgHfEdxfibwb6flhe6pdZfGfXfrbjftfm10fxhlbkfCht4D0W102of;hf040chIhqfFfphihJhhf-5lfMf)aydQf,epbYfVg^hp54b%020Zayf!2Nf$3Wd~105^hQ4/f/e=hig{co6I5=g8f}h h1eA63i0enf;h}5Hcq35csgN3jcvgQi25ucqeD8jgW9}1h0dgpeLcRgsePgveRa7eJc#gBafc*aigFf:e?ia6Iddideeg d8iih30DddimbuiogYe(0maqg#ip1Hg)9{0m0w2J0v2gc-0f1e0;2E3kg,bE0th%h{g`g4h~5ueciMi5780D4Nf|iRema#ff0Ziqfyf#bLhdhDhRhMdYhOd#jfdA04hnhxjmhchvblh(2 hy2HbrhAbxhCfza$hF04hHfHh_10hLjKjlhkjO29fJh!d*f(aDbRjAbThZg2h#0(i{jFdob.0dbWji4/h=5?0AjkjSe5iHh|i~5Heuj2gR6u6Ji4k063eCcii9j|6Wg~cf0De~iQifkdcBgVgke/3d1DcK0AkdeKcQ9 cTa3iyeTgzabiCgDiFbDg_jUc gJf@3jf j ijkJk3kM0Df iUcDgkamaoiZarathW0b0ki+1d0^j#3uiIk93Mg7kLh36}kOk;g7kSgjcFaog%c:c=0zc@dhc_6}kdkEj$4CiJ3M7bi1k;gPeik47zlbk_hNklk(0tkol5jxf9a:fijTl7h7jtlq0{hmdCj/jPfojnh/jgjvfuj*lwhzlyfjjDjsjQh^54lugi4/hVjXhYk!j@a@j_lCd^b(h.3Ob,jWbQ0k0H0X0M0S0C0#k*h:b$hv230jlQlEl#fchgm2bMl.ayd.fRl!jRl$fVhcd_fij;l46ZlSj^mej`i}kHg|7mkbga3M26j7if7ocBg1cCl979i0k:my3;mxd67Aki9.iobc0i0I0i0,0i3k0id~0Z1*krgrkueQcXgy9_gAg$iDeZiGi|kFgIaRes7Lmtekm^mJcfm^gUmNgk0j1h0o0Gky2H0F0I0Fc{0A9_9|i@nbe+g?0;140m0F0e2!9?l21+0c2Z0?0ecYc;c?nnndk~c?ambEj)5Pk,mqi 79iLf=j37KiPlfkM7WmMffmPmRmTmVmX1*mfb(ltm4mcbalRlKbulAhol(3yhrhPn,3Wfsjwn:balMn{lOdWlNj;mRnbn#h+h-m0fhn)b}n(ml1.lXbQar0W2Hk*dsl%n@b$b.h,0bl+l{j:d j=0io4oah`4fnHm?kI7,m_8HoFm|mu79j9k+j{nI7Vj~nMlg7KeykfmKk6lV54ioeIcJmVng9`itktgtkvm(iAm+eXaggEkDmom;oScn7Vf2mGmKkenQk;f2ljo!gkiXkWi!dRe+e-2Ze:l6mCk-79kKo{k;5foJm`kRjainn1n3n5aoi;gunfc{nha00Fnknmnoc^nrnti;nF5(oCo|8}k/plif8pk?pSk^prdvf5mYo%0Aoxc{n#osola_m5fno9n~n.o8hsondJlIjsn}p@54fBp=n?o`jjoaofayfOfQokj%p)p*9.q40bf+mbn~fsl~p lFoZmmhSq1lWm70bohojqghTjLmnqhj,o7o1ovo(p(ozomnGoOoDmr8zoG8ylegdkMqMghmBg3oP8}h5o cf8KpUd6q#m eEgk3d0s2xfOiskseNiwgwizeUkzm,kBe!pgqVqKnJ8VqN8Tq$q!i7pXkTk{p8g!pbq,q.n5q~clqW9picpRq%ihp2pSilr8k`eG0F0XgZkXi#3dbD0w2d2-9|nz1{0.9|0jnxl0nn0w1hrhl8pi8=r38(nPqQh3rTq)lwre2y9`p)n%p,oap.p?job|p;lNr-q0lGbhp_r=jz2#dRjCo0n~qd0Ql`lHdLqkm5lUl-b.k!lZjXs8bZfWoBqJpO9pj1rmq!j6oWsomAk8rj3:oRieq%oVrpsynTpsk{0U0i0+0W1fm!ium$ixo/q_iZkAo?kC0NrQkGr08;o~snoK9hr5s#p4rs4/iWcUiYpai=0GsI0-bDe(18q;0,bEkZjX0Ck*qUrisX8}pksxq!pnsqs#pqqmn;04sFsH1fr)lNs9dEn+r/dUfks7lNn_lJtnpYbpjZr~lNp~r{lxodm3r+tDm6sblYtxq8d%bZqolvbuj;j?qGqyp|l)b)fiqds qvqplTqHpM2`0R9N9u9I9w9F1j0N9zt;2U2P0U1)t.0R9xaG0+0-0/0t04.

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

.1280131w ézM;5(=g8upyt_hdàù:)-rP,/n3c2amso6HbeTvi7k9lfS.[]q04*050t0O0q0H0R0V0J0d0F0V0H0J0J0k010q0R0o010406050J0n0I0I0H0z0p040X0K0V0n0|0K0D050C13151719110o04051p1i1s0C1p110t0R0Q0;0?0^0`0?0D0l0n0H0l0O0y0o0p0q0s1g0d0s0R0l0s0V1U0s0q0 050,0N0V0O1B0@0_011T1V1X1V0q1%1)1#0q0z1q1P0;1c0J0o0H0D0`0G011+1D010W0.0O0D0H0I0O1#2022271-2a1)2d2f0 0a0d0A0z0K0o0K0J0R1f0D0d0*1~0z0z0O0F2A1i2i0D1q0C1P2N1`1|1{1$0t2k1E0R0D2c2x1#1y1A0=1,2X2Z0D0K2%1#0o2G1q2L2N2@12212B2)282-0z160V1#0H1S2G0W0`030r0r0F2.0O1X2,0K0y0b0G3i0 0d0b1i0H2^2{102`2j2}1-2 3133350O3701393b3d3f2!3i3k25040d0G3p3r223t2L2W013y0H321q340s36383a3c0*3I2-3K0y0E3m0E3Q2K3s113U3w0`3X3Z053#3%3E3)3H2Y3J3j0y0%3m0%3?1j3^3u2|1C3x0K303Y3A3$3C3(3G3+453-470i3m0i4c2@3_2{3V3}4m413F3*3e4s3h470L3m0L4y4e3`4h3|4j3z3!3B3D4G443g3.0S3m0S4P3S4A3v4S3W4U4l4W4n4Y434r4#470m3m0m4*2M4,4g2*4/4k3~404o424q4I4`3k0U3m0U4 3T4B3{544V3 4X4p4H3,4K3k0b0$0 5u5h514C4:565o595q4J3.0b0b5w3o0C3q3@4+4f5A554E584Z4_465t3M3j5y5Q5k4D4=4F4^5b5X3i3:040b3=5M3R505$4.5(5n4?5p4!5-0b495:4b5?5O5^4R535{574@5a5r5H4v5:4x654d5P682~5B5T6c5F5c3i4M5:4O6j4z5_696o5)5U5+6e470b4%5:4)6x4Q5j5`6B5|5*6d5G6G4|5:4~6L6l6N6A5S6C6q5 4t5t5e5:5g6Y676!6n6$6Q6D6S6s0G5v046{5#6m4i6?6b5~5W6*0y0G5J6}5L5N6k6:4-6#5m735E6)5s773M0G3P6/5i7f6=7h5D5V5,760G5/7z6 6;717u5}7j757l0G627K7C7s7E4;6@6(7I3.0G6g7V7N527t7Q7i7w6F3L6u0G6w7c6y704T727v6E6T3L6I0G6K7-6M7O7:7F6R6r5-0G6V847Y5R806^827y6,0G6.7|6Z7~5l7#7=6_5-0E6|8o875%6P7$7?6s0E798x8r6O7;7G7%7@3/3M0E7p8g7e7Z7P5C8D8v8n5/0E5=8K7r8M7 8k8P8m760E628%8A7g8Z817k3.0E6g8:8*7!8O8-7T470E6u8|8?8N6p747x7l0E6I955h1t2=1i2%2Q0t1|2V5k4H2$1z1q2;0O2?3s661q4H9o2j0R0t0`3a2L5H3A9v9x8#7l5J0d2o0O9D8b9F1#657/3W0 3c150n2Z0J9q0d6z280K0 0k9X9Z1-0~040Z0!9q117d9t2B9C019y2{7U9B9w9^9E9{9H2e9J9~9L9{2N5N9P0T0 0c2z0s9(9P0D0N0 2v2c9q9)0`9+0jamag0 2m0Oar7D0`9#049%9;an010J3M020#0n0K0q0h2w0o0r1T0J0q0Y0F0J0QaHaJaLaw8i9+0Bafax9Q040I3da!8X01azaB2_9PaF0 aXaK0h0za`aZaC9Pa$a(8i0D0 2c3*2Y0la.3Va;bb5ka^04a~0h1e0W0y0mbibe4.9+0xb3a/aa040@bt4Cat0R0F1T0O0zbp539+0w9/bb9@9_228/9|9K8.8{269IbR8`3k5/3Q0db#9Yas042abC0RbEbG9!0 0Yb.3x0 2G0H0t3Ib=ao0 0jbs9;9:a?4BbM0r9z47625nc5a5c8bUa2bW933.c95?b$b%a)bv0W4jby5%0 1;2Zcr4.0K0c0 2Ycw69bAb+b-b0a)bIbKcH9u9}bN0D3.6gcacN9 4uce2fcg7(0ycRckclb$aDb504cu0O0r2;2v2GcCb/aAc=b?c+1UcvcLa/azb;c}bz04aR0z0}b|01apc06yd1c5c73k6ucScY8F4Ma1cXa4bSdf9N3qc%c(b(0Q3Y0O0n0z9W9;cm8ibddBc)ctc{c-c/9md7c d7c*201X0qd7apd7bgbi0hbod15kbrcKc3cM9Dde0y6IdhdnbXd,cWa38Q76d-c$dsaDcocqdFb(0Rc^aycz04cBd a)ahb@221KdTb~d70I0R0 7pd(a/b2e7b4aic+ald!bqeeescD04dv1)dydAek3Vbr0xbJc1bLcTd+6Vd.d@7l4|dld?cU3keLd`dsdte80 eydxdzed9,dOcAe%9.enc~9$e23Wep2YdSev28dUe^c_e!eAe%0Ze)e5e+da4edceJ9`476,eMeS0y5eeQdi6sfaeVcldG049S0I9U0OeB9p9PdNe{3|0 0H0o0o2c0te%aqfva*e}e$fFd$eHf6d*f85t6|fbccfPd=fg60fQ5?c2fsc4f7bO6G79fRdo3i9GbVd/chf(dq9=3V0F79030d1P0p0O0f0dfq0q0d0?g30RaR1*3c0D0q2c22g21)0:2c1`0efq2C1ge@dbeCddfO3KbQf/cZ3jfUgu8Fgwa7f?9hf_g31*2-0I2C1*g4fnfpg0aR0d0P0sf}f 0j2c0d0M0H1e1L0X0H0Q0Kb,f45PfM9~d+5;gteN5H3:ffgy6sg:gBflf|f~e:dE2@dCel0 f0fFc*gh2Gave-3Vd}bFhccs04h90Ohbh2aDcycA1hhg5`9R0K9T9Ve:bv0R0We:h8gahae efeh5:e+h09$a=3sh33VdWaIa{gRgTdZeCd#0 e,gof!d)g.gr61g;fch)g^g=6Gcj3qfZ3S5Qgqf%5tcR34cbf+0b4vh-h+c#a8a)f^0 f`a,0z0N0R0s2jg1g3341Xg71~gagcgagFgghDgj0:g90FbE2dgad%h#9?f$cP6Gdgh|cTfS6tgxh.5tdg9Oi5gE0*ishufo9V2C0n0d0g4jibidhqh!h?3Uh^iC5td-iFfV766HiJh+d_i4b40 i9i!22hKc@hrbHh5f1hjhlhNd|atd~hmb(j4h0e4e6jaeYfmiSfpfr3ShO5khyhAj02~b6hDhkhFfFeg0 0$hJjr1-a;hMjmaDhQaY0hiYiaic22hVizeDhYiyi(f#fNh_3ieLi.g_60ePf.iKjYf=h=2Mh@iB5Hfaj!j)0bfej(h+fii^a/i604f`0l0z22iQ0r0Q0.gfgOgeihg6gbikgbiwgegkgH0:iQ1~hvfqjTj-i)j/476{h*iHkui1kwfXj|f@iPgmig0daN0n0?2Ag02B6{j@2C0e210^1*5u0$0d0$kX1S0Hib0,ga0:0j2Y0=0n0Jg+5^g-cO7Uf)j=fc78i=kwf)iNi_040lk3fqk5k7kojCaye/l6d8j2h7jt1`jvfJlbhW4.jyhIlg04hZj6a9j8hfjgk~jcl9hoe5i$lpjhgMhwl9jphBldhElmh6li53lkejjQhXlni~020laLjF2MjnljhHkU0rkXjAlmlog,gpks3L3Mf*d:7ok`f+l=gBj,f?i*7UbZk@kwg@j_m0f=aDj~f`fA0|gb0Jl30Vk8ifg4iikdg9kfgdio9HhukkgklCl5i%kqjVh%jX7Kkvl@49kymAm49Pm6gling4kHkJ0R1RgWkN0Uk90d2Y0W0ed5e#1*0u0d0ikYidk#gdk(k*1dk-kpl{l-77h{mSiGl@i0m2m^mEjhm82zl2k6mdmslAdDl8lth4e(lchijuj5jUa#lhlPlZ5wjBn7hdlrlGnblendlXhnjelzjGb(mrjlnslqe5jqnlhhlvlLe_ngnea/lNnkn4e.bh0VlVe:lkm#l(nH9*jSfLl,jWi+77iEm?i/7Jdkm`l;iMh;eIn$7Ui-n*j#7y4%mCl;i@gC4.mGc/k1fq2ymNgPmgkcg8gmimkh0:kjgJiRknnz3tk:c6gr84mzl;j%cfn`7JeUkBgDi7mHkakG2vkI0HkK34d4bBgb2fingZ0loL0q0ekLle3OkXmQ0+oUj@m.j.n?ktj;n_j)8el?l;j{o0ewo32G0^mMnvnAa)h1nOjRn9nXfwnplIo lao~nhlMl!nNnwcnnnl9hCnqjdhpnonyhxcAnDo|nFncjwp3nMl)lSlU0hnonGp6nIp5nK3Vlk5=p39+0!l*k/n#mwn%8ooqf:bY5vn}pQ3/kAolpLk;8{k?o)fc8xo,pUp(g|mFgEcpg60r5umRo9ijmjodmmogklpjn!jQl|8{l/l f+8Ip)cZq6p,iOoz0tkEmJoDmL1R340eoQ0dfonR0}1XoR210z3nkV0j0KiW0om,0xoS2G3n0m0S0Lg0g2mPo!kro$bYl~p$iH8Tq78FqSqak~p/mb5xlwn6pnetpBmulupplJhGnjptlEpcnEhsp1lfq?53lxjfq%ewp~q`28lFpdlHq_pznYq)o/28pspGnZr1jDa_pvlW3NaDlkq!rfl7040(pxq,rdr9hn0 0yq.llrupIqLmvpZbYc9q4d:8%qT8wh:pXq0m:8:pPq8m_otj)rRqWj}gE0Og(1d2Aggo8kbp^ockgmm3c0nqzgk0jgHgJkFmr0Bg0r$1eo@k.rOpCq1bYn)h}rJn-rVp%n:ra1-mG0K0vr}1cr o7oB1y0WmU2G0Diu2sqgoFo@kLoYmQ0yst0ooEkKgW0bqF6wmtm/qN3/n^s7p*n|n.sPm|lur~r(i~rjlYj19,fEp3pep2r7b}rv9Prme+a%r4q^nrsds+lKs*01rcs`pHi~rys;pypClQs_t3cxrxrz5LrBs1sZr2q=q~jss=pglypijjlDrBo!0C9s999n9b9k1i0q9etw2T2Ok!1)2N9c9:0*0,0.0J04.
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;(gup_d:)rPn32ms6eTRi7k904*1w ézM5=8ythàù-,/caHobvlfS.[]qD050h0s0M0U0v0Z0q0E0T0Z0U0q0q0J010M0v0f010406050q0e0p0p0U0k0L040#0W0Z0e0~0W0m050S1517191b130f04051r1k1u0S1r130h0v0Y0?0^0`0|0^0m0d0e0U0d0s0Q0f0L0M0N1i0E0N0v0d0N0Z1W0N0M11050.0X0Z0s1D0_0{011V1X1Z1X0M1)1+1%0M0k1s1R0?1e0q0f0U0m0|0o011-1F010!0:0s0m0U0p0s1%2224291/2c1+2f2h110a0E0l0k0W0f0W0q0v1h0m0E0,200k0k0s0T2C1k2k0m1s0S1R2P1|1~1}1(0h2m1G0v0m2e2z1%1A1C0@1.2Z2#0m0W2)1%0f2I1s2N2P2_14232D2+2a2/0k180Z1%0U1U2I0!0|030g0g0T2:0s1Z2.0W0Q0C0n3k110E0C1k0U2`2}122|2l2 1/313335370s39013b3d3f3h2$3k3m27040E0o3r3t243v2N2Y013A0U341s360N383a3c3e0,3K2/3M0Q0n3o0n3S2M3u133W3y0|3Z3#053%3)3G3+3J2!3L3l0Q0A3o0A3^1l3`3w2~1E3z0W323!3C3(3E3*3I3-473/490I3o0I4e2_3{2}3X3 4o433H3,3g4u3j490r3o0r4A4g3|4j3~4l3B3$3D3F4I463i3:0w3o0w4R3U4C3x4U3Y4W4n4Y4p4!454t4%490K3o0K4,2O4.4i2,4;4m40424q444s4K4|3m0y3o0y513V4D3}564X414Z4r4J3.4M3m0C0z115w5j534E4=585q5b5s4L3:0C0C5y3q0S3s3_4-4h5C574G5a4#4{485v3O0C3R5O3T525S5m4F4@4H4`5d5Z3M5y3@5(5Q5*4T555-5p4^5r4$5=0C4b04645A5+4:5~594_5c5t5J4x664z5_4f5R5|305D5V6d5H5e3k4O664Q6k4B695}6p5.5W5:6f490C4)664+6y4S5l6a6C5 5/6e5I6H4~66506M6m6O6B5U6D6r624v5v5g665i6Z5{6#6o6%6R6E6T6t0o5x046|686n4k6@6c615Y6+0Q0o5L6~5N5P6l6;4/6$5o745G6*5u783O0o5%7d6z714V735F5X5;770o3=6~5^7r6N7g6?7i7w6F6U3N650o4d6:5k7G727I607k767m0o6h7Z706=7T4?6^6)7X3:0o6v7.7$7S7u7U6S6s5=0o6J7{7;547H7)7j7x6G3N6W0o6Y7E6!7=5n817J6`7`6-0o6/897f7 7(5E7V837L3;6}0n0z7~5T7@6_7_770n7a8C8w5,6Q827K6t0n3O8L8F6P7v8p8J5=0n7B8U8O7h8d8R8f8B650n7P8k7R8m7?8Z7^7l3:0n6h8=8X808o8/7,490n6v8~8^8n6q757y7m0n6J975j1v2@1k2)2S0h1~2X5m4J2(1B1s2?0s2^3u5`1s4J9q2l0v0h0|3c2N5J3C9x9z8#7m5L0E2q0s9F8A9H1%5_7t010x0m110v0p2y0k0M9s6A2a0D3o9#9R0m9U040T0q0Y9s137e9v2D9E019A2}7-9D9y9{9G9~9J2g9La19N9~2P5P9+113e170e2#0q9s0E9$1/0W110Jajal0|10040%0(9=9*4D9`9|248;9 9M8:8}289KaF8|3m7B3^9R0x110D2B0Naq9+0X112x2eay8bat0ca#8,3Y112o0sa)3Xan04ap9@ar010q3O020)0e0W0M0b2y0f0g1V0q0M0$9/0Ya|a~b0a/5mat0RaV7%3~110p3fbe4:a;a?2{9Ra`11bba 0b0kbwbda@9Rbgbi8b9-2e3,2!0dbo55bqbM2abu04bA0b1g0!0Q0KbTbP1/at0jbFa*aQ040_b(4Ea,0v0T1V0s0kb!as110iaxbCaza0aB0m3:655paAa2494ba42haK95c29P3s0Ecgakac041+2K0s0eb@9@cibj01bOcqa^9-b9b^ct110$cz9-0*b:0M0u0s0U0,cpbscsa%cDb/b;0vb?czbEcvcj4t0p2BcUb}8bcucN8bbRbT0bbZc%a*b$b|c*9_b 0g9B4waEa7aG3m4xc9a68S776h3Schcr8bb*0!4lb-5,112e1|0sa.cXcs0W9(042!de6a11cl0McncM9rbDb`c?dyb~9Fc{3m6vc4c_a84NaIa5cb840QdH5(d8d8a^dbdddlbG110,0q0T0k0 dvcodrbNdodqdYa*bH0mdidkc@3Xatb{9@9?d_c5dF0Q6JdIdO8r4)d2e56te3dSdTeddV9V0!d,30d!0sd$d(0fd*dx3Ud9a*dn112/9!d:a:d.1jeybf110%czc,a}bx0,239Z0s2hd?c/d_eD04bheC4:eHbc0b2/0peQdCa$110(d|6zc:0Ee09}4}c}d47m4~e8c~aLbXce3Pede cgcwdgd?2Id^e%c;eEcQ04d#d%d)dwcVe)eiamaofi3~aXdpd?fg04a(e-df04dhf5fqeFftdsfbelfdeofffA55at0(b%d}a/e/aC496-e4e`ccfQdMcafTdPfReceecjae0pagelcza;cCfHejb+0f0f2e0hfqfseRfBfwdjfqfLe,d c_e15we=c65v5xe_e?5J6}3Sd~f7e.g3e:5v7afSgb6H9IaJfY8r5Ke}a^0T7a030E1R0L0s0G0Eel0M0E0^gH0vb61,3ed?2e24gG1+0=fw0Fel2E1iexg1ggfOc16H3Ogmg73k27gag+5$gu9Rgw11gy1+9J0W0p2E1,gIf(f*gEb60E0t0NgBgD0c2e0E0V0U1g1N0#0U0Y0WcTg04ge-g$5JaN36c5dK5v3=g.ht5?aa9^b.04gAgCflcAa=hFatfzf{5}f3d@hFdWeq2OeshBf}f6era^eufohFcxg{f)ahhPegh#hNfxf/b#f9h/0|eXbxe!e$3Ua^fJhFbqbr3uhT5mh@b0h5h7h`2Oh|fhfMhngifP5vc3hrdJc 3kc8gqgnige}gfh{3Who6Hd6iie963d1ing/d69Qcsg?04gybm0k0X0v0N2lgFgH361ZgL20gO2fd?gHgWgUgWgN0Tb?iWgZhmg2dEgj6ug6hx0C4Ohwiki=g;iFgxg}0=h0ah2E0e0E0H4liLiNeBg!isdDa1g4e3ixgr6t6IfWd3g/ebabcs9-iJj624h~fkeVfIh;hLf:hVh*04dchR3Pf2fvf4f~jv2ahZd/2_i2fBi f+jK1/b*0vehjTbkjHhOh=01hJeGa{eIb0eK19dveO0Mi8hAeSawjYhG0Ji0hXbtj*eYj4iKiM24j=ia04j^j9i9itieg%5v6Wg*i;e^iBkhiqfNkc5JfRjfio3k5gi@e{0Cf!jn8biGgy0d0k24d#0g0Y0:gSh2gRiRgKdviUdvi)iY0=e!0=d#20afh)ici,jci.6|i:ikk(kufU3NgdiEkzi|0hgYiQ0Eb20e0^2CgE2D6|kw2E0F230`1,5w0z0E0zla1U0UiL0.d?0=0c2!0@0e0qhl5Ridi-if78glkqg+79jjiy7zglk:d;110dkEelkGkIjSjOhYjulKdzaufajAj$j(j$i4eZg{k5lOk8i1efjCdXlNjoh-jJl)c(eAh,9.h%f*aij_jVjXl-lCj!h.jyh:lPlUj bxb20gl00ylYcOibl{a:bv0db0j|hSa^c!5yla0gla8vlSmbi+g#kn497pk)e{mwk,dPmwhzirkajbc07-hqghly7Yhvkjk*aNlB3XkAk_0-c#0qlH0ZkJiPgIiSkOgNkQgQkSg`0pkVi#l=kZk9hAiu7Mmxk-78imdNjg7`c3mR9jk=k@gIk`k|0v1Tham7kKe.0m0!0Fd(dw1,0O0E0IlbiNlegQlhlj1flmdBja9wmu3NiwmKm 7ziAm~kr7Zi`dZ04f?0~dvmXkHmZlJl#9Rc)nTmam1l jZlRnZj%jxggi3m3b0h_j+0bfql!j}cshQl:n#nWl.9Vj8n`l|jRl@mc5ml_n^jIhWmFe(nYn)eWn+b12xm60zkwm9o9n;minUbv0ZmghFmk04nnmpn$h}k!mtlqkd78dHluhx7.lxnD7YdR3smEm@nz78jenCnHe7mOmyjmj?4:mT2?0WkCel2Anah3m$kNgMgYgPiXkJkUi}kXh(nSlok#mHmvkfoEk*kinGlvkfn2oYn4o:36n70Uk}36b6d(cmj:0Ehd0dj:0Fk~di3Qla0ygEgGm7nwo8c^oA7-kpoRlvktoUm{8inJl|o!o$0`n9n}n=c(lMn~d`n(nxl|n_pUpSoapXn*bvn.n-eYn:jBjDo5j#o2bpl/j_h$kYo_omn?h+p=l+o7oXjwpZpw3XlVm5m7ojf8k7jtbSmfn/p|l}l,obq0hKqhbQodq5pqq7pY0(ol3vlpk$lr8um`dPqxmA8rqxmDkmpy8}ltpBhx8CoHkrqLhzgvi|dcgK0g5wndo+iTm)o/gRgWo=kWo0pvoNqGaMg)o e{8LqMg+q;qPg=p7kLk_2xk{pbpMpi0E0F0Mpmf)op0 1ZpmeL3pl80c0Wj20fnu0jpn2I3p0K0w0rpsppkwq*5Sm^3;mJhsik8Uq=qKmQkyl|qSmX5zj_nVpOq8qjp!f|o6fyj)p$eYp(bxp*l^a,l(pRfupWp_n{h!qeq)rYdpl`r#rPp.qkm0rNq2p#bSn.qnoin.rXp/bNmeoqj_osrIs1jL110Bp-l~r?b_q1p qlrTm4of0Crn0rqpj@qsoMruoO8(qyqCm}fXqNn1oLqFqvoB8=sw8KnFszq?iDrEmSi|0shi1f2CgTo*kMqYo.kRkJ3e0erhgW0ce!g}k^jR0RgEsR1gpMln5*quo|aMoDqJrzi?pEqzoKsh1/mT0W0Ps/1es;o)q{1A0!ng2I0mi%2uq}n8nak ohpr0Qti0fq~k}hasmrortkbq,3;oQryq:oTp2qKoWjGsQt8sTqamhjFlO0%f`sea+qfp~k6r^t2h?odrVbBowe)eUs83zp}rRm2sjb0r}m8r mqq9rJ110QscqgrOqirSr{eYm5tvsot?t%k7s?tOp`l%jEjPhMtUh~p;t*jZr,u7sr9#0S9u9b9p9d9m1k0M9guv2V2Qld1+2P9e9?0,0.0:0q04.

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

.128013+;(gupxF_d:)rPn32ms6eRi7kG04A1w 5=V8yOth-,/caHobCvlfS.[q]U050k0v0N0T0x0Z0t0G0S0Z0T0t0t0I010N0x0g010406050t0f0s0s0T0n0L040#0V0Z0f0~0V0p0G020T0s0g0c0G0w0v180n0(0f0v0t050R1517191b130g04051G1z1J0R1G130k0x0Y0?0^0`0|0^0p0e0f0T0e0v0P0g0L0N0O1i0G0O0x0e0O0Z1/0O0N11050.0W0Z0v1S0_0{011.1:1=1:0N1{1}1_0N0n1H1*0?1e0t0g0T0p0|0r011 1U010!0:0v0p1m0v1_2h2j2o212r1}2u0s2w040a0G0o0n0V0g0V0t0x1h1j0,2f0n0n0v0S2R1z2y0p1H0R1*2%2b2d2c1`0k2A1V0x0p2t2O1_1P1R0@202;2?0p0V2`1_0g2W1H2#2%37142i1j2|2p300n180Z1_0T1-2W0!0|030j0j0S310v1=2 0V0P0E0u3y110E1z0T383b123a2z3d213f3h3j3l0v3n013p3r3t3v2@3y3A2m040r3E3G2j3I2#2:013N0T3i1H3k0O3m3o3q3s0,3X303Z0P0q110q3(2!3H133,3L0|3/3;053?3^3T3`3W2=3Y3z0P0C110C441A463J3c1T3M0V3g3:3P3@3R3_3V3|4j3~4l0H110H4q37473b3-4b4A4f3U3{3u4G3x4l0u110u4M4s484v4a4x3O3=3Q3S4U4i3w3 0y110y4%3*4O3K4*3.4,4z4.4B4:4h4F4?4l0K110K4{2$1K351z2`2*0k2d2/49014V2_1Q1H340v363H453*054V5v2z0x0k0|3q2#3 0E3P5D5F4E4W583A5J0G2E0v5M4V3}4Y5Q1_0R3F4t4Q110N0V0.0Z0j0!1m0:0L5x2$0G5%5n0V110I5?045^4)2}010s0x110B5~134r5y3,5L015G3b3 3#4d0G6d565O4k3!2n5T5V4=6o0P6i5#5B4u620p5)5+3:0j1+2V4x5~604P5`5|6J5_4 6466685~5%6l0j5H4l414.6W5W4X3 415S2v6s576u6!3(69396c5E6e6X6g4l4n6#6^6m5X3 4n6+2F6-6n4H3A6}44612p0z110!6I6a5@6P6A112t2b0v0v6O7c210V0F112=7r6L4 6B042C0s1y7i6y3-10040l6T7G6V6 6`2j3 4J6~76714I6q6,6_6%5P0P7T3(0G7*6K4~627e040x0!7y7-2p0t3#021v5+0c0i5:0Z0L7{0f7}7?6z2p7u7w0p865(047n2W7q7N7s0|7J0%6U8j017_11837}0A2t2W0t8s0N0c8n7z627J0)7L7G6=5w6@5M6Y3A4!7U7!6t780P4!745U8Q6.8S8O7)7+8$7k3e6C5,5.805=7G7,877t110b5}8/8(3M7m0p7o8h6?8C2p8l8B7@218q048y0c0J5+1x99948;8k110)7M905C7P8M0P4^8P706(4l4^8V7V9t3A9q8#7*8`0|7/4W7=8_8o97990U4x2L0n9e9I917t7v7:8b9R954a8|8~9f7I118m8i9S0|9K7|8z8u0p8w9Q9l9g018E8G4N9$6W9o5a9r5N7W3A5a9w8X775Y0Pa09B8$8:8d5*8+6G9O8c6M048@ak7A9!8g9$5n939*9Y8p7`9.9a9c8xazas4 8E9k5w0R5A5f5u5h5r1z0N5kaP2-2(0T1|aM0R5i1F7H5n2W0s8,0z0v6F6!1r1t1v1x0G9{aI1N1I040M1j340V2r0N1~0x0S0x0G0k0f0G5/2Q0Ga:0G1}0=0,0f0h0G1#9;a;0t1i0N6k0p3s1n0T0~aW0=0d0k2j0=0S0-b0bd0x0tbE2T7D0=051s043k640p0x181zbN0m0$1K3I1G0#b40Z001,bn0f0O0/bEbs2i2W0nb50vbhbj8va;b/bu0xbw0Q0G1,0k0Vba1g0:bG0vb=bgbi5z3t3-1W1Y1!1$1(1-1?251@2x9+017/7;6UaJ3t5 0-0G2i0=0f1jcd2T5ncg1Z1#1%0Lcl241?1^a#4 cs9H37aeal0$cXao7.7m1=cTaI5A0$0G0X001xbp1}0?0_cz190G0v0h1s0gc:0T0Y2Xbda;bk8w5^5A0D0kc 8}0f2W1z5Ac^bpcE5u7 6481ddcwbY1O1Qcf2jchcJ1(1*1,2j300.bE231;cOcpaw2C2t2v110o1)1+9W395t6y3)5eaK8K6_6Y0y3Ba17#4kdY5R6ra77Wd%2n544Dd#4Hd,2%5$8o7Bag6E0Td87ndb8 3HcV4 5{048^cU9D636504678H9}9n6{dY6i3k6$8R4Yeh7Y75d*9ten4/d/el3yend?cQ7l04d`5-5/dk8.e78oe4e6e1e86RebaH6b4P9~eg405K7Pd:emeUa69s58dY6*d.4ga2ereUey8IeQ9m8LeT7aejeWev0EdY73d)e#d$4md-4Te d;f1eye87/7g0ncZ8)8e8}ar9X9^899Vfc8{7C0:7EaE8D11a?4|eee=7Re{7%eV9xe$fze!e+fC4Jete*eXewfzey8%8ocSfl9,ay848zd7d90Nd 9?eLeI9U7xfh8d8f7pfq929(f-96fT8tb`aCfU8Aav9^9`eP5edV6ffxdY8!e^fBf08Ue~fFg7f24CfJe`g35!3Fad7+e8d_6D5-d|fXd fR01e4anf)5n7Bf+e0e:f|f/f{3-9-f_9bb0f^85gEat9if~7HeSg29pfAeqfC9vg9fKfy9ve)4;8YeY9A6xfOcqfQgw4 gG7}dj5;f!3*e262fjf(eHcqgyfff,gMaFgD9@gFf=9/f@g^f cqf}8/g`2p0S5J04030G0d0E0mgP7Ofw0pfLabg5gVf0a5gYgfaagc55gaf5abg+gjhgfmeC8,eFgsgueKg_glaqh2h6gN049)hWg:h8aAgJhbezf.049jed7Ncv0,2%dQaN0Y3I1e3I1=040*1j0t2X1i2/dhdr1XcIcjcLdCcncPf87wc%5yh:5u0G0Tb71=b@b500cCd5cecGdsi7cKcMdD26dF9^9Fc$cuaK0Rh|69h`690,0.0:0t04.

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

.1280131w ;(=gupyt_hd:)-rP,/n3c2amsobejvikR9lfS[q]050o0F0l0A0I0M0C0d0y0M0A0C0C0g010l0I0j010406050C0i0B0B0A0s0k040O0D0M0i0,0D0w050v0?0^0`0|0;0j04051c151f0v1c0;0o0I0H0!0$0(0*0$0w0h0i0A0h0F0r0j0k0l0n130d0n0I0h0n0M1H0n0l0/050V0E0M0F1o0%0)011G1I1K1I0l1Q1S1O0l0s1d1C0!0 0C0j0A0w0*0z011U1q010N0X0F0w0A0B0F1O1:1=1`1W1}1S20220/0a0d0t0s0D0j0D0C0I120w0d0T1.0s0s0F0y2n15250w1d0v1C2A1*1,1+1P0o271r0I0w1 2k1O1l1n0#1V2K2M0w0D2Q1O0j2t1d2y2A2%0=1;2o2S1{2W0s0_0M1O0A1F2t0N0*030m0m0y2X0F1K2V0D0r0b0L350/0b150A2(2+0:2*262-1W2/2;2?2^0F2`012|2~30322N35371^040z3b3d1=3f2y2J013k0A2=1d2@0n2_2{2}2 0T3u2W3w0r0x0/0x3B2x3e1g2#152Q2D0o1,2I3i0*3R231d3*1e3(2)163$3;2$2+0d0I0o0*2}2y3V0b3m41433s3S2L3v36380d2b0F4a3;3T344f472A3c3g2,1p1W0J0/0T0N3#3D4s3G0c0/0d4A2z4C3/3H0N0/2!0D0G2u2w3{4B3F4K0.040f4H3~3h4u0*0w4x132M0F0C4!4J4%014X0u4!4G4V4;4)040T0C0y0s0-0l0F0i0s4/4`2T4=0/0q0p4!0;4T4I3F4901442+3V3y052@5j3Q3t4d3U4f1^4h214j5k4b315u4n3x1O0v4r581{4E040d5O4G5g4#4t590C0o0/020Q0i0D0l0e5Y5!5$5(5#0e0K1 0H0D0I1T0$0d1K0C532p4-0d0H3J540s0Z2q0y1T4~5052615+5*5Z5,6b0e5e573 5r0m454f3X3L40425B4l5E3V3X5y224k5t336v5H3c5P4_3 4K4w042t0l55145R6G4$594X0P6i6R2.0/1 1*0F0F6V5T1{6T6%3G4|67510j53556+4W0/0R4^4:596J0N0D566P6{6X046Z2t6$715K1W0D5M2L6`794(4*0w4,4.5R721W4X6_5R5f3`3}3%0F2A3@2B3,152E7A0A1R7v3)1m3f0v0T0V0X0C04.
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

.1280131w ;(=gupyt_hd:)-rP,/n3c2amsobejvikRlfS[q]050o0F0l0A0I0L0C0d0y0L0A0C0C0g010l0I0j010406050C0i0B0B0A0s0k040N0D0L0i0+0D0w050v0=0@0_0{0:0j04051b141e0v1b0:0o0I0H0Z0#0%0)0#0w0h0i0A0h0F0r0j0k0l0n120d0n0I0h0n0L1G0n0l0.050U0E0L0F1n0$0(011F1H1J1H0l1P1R1N0l0s1c1B0Z0~0C0j0A0w0)0z011T1p010M0W0F0w0A0B0F1N1/1;1_1V1|1R1 210.0a0d0t0s0D0j0D0C0I110w0d0S1-0s0s0F0y2m14240w1c0v1B2z1)1+1*1O0o261q0I0w1~2j1N1k1m0!1U2J2L0w0D2P1N0j2s1c2x2z2$0;1:2n2R1`2V0s0^0L1N0A1E2s0M0)030m0m0y2W0F1J2U0D0r0z0z0r0b0.0b140A2%2*0/2)252,1V2.2:2=2@0F2_012{2}2 312M34361@040z3b3d1;3f2x2I013k0A2;1c2?0n2^2`2|2~0S3u2V3w0r0x0.0x3B2w3e1f2!142P2C0o1+2H3i0)3R221c3*1d3(2(153$3;2#2*0d0I0o0)2|2x3V383L4042013Q3t2K3v35371^2a0F433s3S4e3U4g473!3F3/010J0.0S0M3#3D3g2+1o1V0c0.0d4A2y4C3G0w0M0.2Z0D0G2t2m0m0B0i0L0+0j1R4J3~3h4E0)0-040f4$4L4u0w4x122L0F0C4.4t4)014+0u4$4I4{2S3H4x4^0y0s0,0l0F0i0s4_3{4B521`4+0q0p4$0:5f4K3F414l454g3y052?5r4b4m304o335u4i204k5z3;3T5D3x1N0v3c4/4|4G040d5U4I5o4%4D530C0o0.020P0i0D0l0e5(5*5,5.5+0e0K1~0H0D0I1S1R0Y0H3J5b5d2o1S0y4^630C5759610C5;5:5)5=6d0e5m4`3 5y442*3V3X486m5A5K6p5F214l5J5C6v2z3c5V513 4u4w042s0l5c135X6F4(534+0O6k6Q2-0E0.6L4!0F6U5Z5i0.4-5X5Q534;041~1)0F6#6+5h1V6S6$4M4x6{4u4+0Q506,1`6I0M0D0s726^0)6.0o796G4|0D5S2K7e6V3j5568580j5a5c5e2(7a4}0.0q7k6%1V75777z6|6/0w6;6?2$6P7A0)7h0.7j6O737m040o4?6=7t3$7v706j6+0v3}3%0F2z3@2A3,142D7:0A1Q7+3)1l3f0v0S0U0W0C04.

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

.1280131w +I;5(=gupyxt_hd:)-rP,/n3c2amso6bejRivklfS[q]04050s0K0p0E0N0Q0G0d0C0Q0E0G0G0j010p0N0m010406050G0l0F0F0E0w0n040S0H0Q0l0=0H0A0d020E0F0m0g0d0M0K0 0w0U0l0K0G050z0|0~10120`0m04051x1q1A0z1x0`0s0N0O0*0,0.0:0,0A0k0l0E0k0K0v0m0n0p0r190d0r0N0k0r0Q1$0r0p0^050#0J0Q0K1J0-0/011#1%1)1%0p1/1;1-0p0w1y1X0*150G0m0E0A0:0D011?1L010R0%0K0A1d0K1-282a2f1^2i1;2l0F2n040a0d0x0w0H0m0H0G0N181a0Z260w0w0K0C2I1q2p0A1y0z1X2U2224231.0s2r1M0N0A2k2F1-1G1I0+1@2(2*0A0H2.1-0m2N1y2S2U2~0{291a2:2g2@0w0 0Q1-0E1!2N0R0:030q0q0C2^0K1)2?0H0v0D0B0v0b0^0b1q0E2 320_312q341^36383a3c0K3e013g3i3k3m2+3p3r2d040D3w3y2a3A2S2%013F0E391y3b0r3d3f3h3j0Z3P2@3R0v0B0^0B3W2R3z0`3!3D0:3%3)053+3-3L3/3O2)3Q3q0v0X0^0X3|1r3~3B331K3E0H373(3H3,3J3.3N3;4b3?4d0h0^0h4i2~3 323#434s473M3:3l4y3o4d0I0^0I4E3z1B2|1q2.2X0s242$41014N2-1H1y2{0K2}4W4j3Y054N4;2q0N0s0:3h2S3@3t3*0d4|4~4w4O3n512e2v0K564N3=4Q3r523|404n0:0P0^0Z0R3}4@5l2;010c0^0d5s2T4l4I0R0^0G0H0~0K5A4`4m5v0@040i5K5C4)0A5p192*1o5R5u2g5O0y5K5z5!3E5p1o0C0w0?0p0K0l0w5Z4H4)5O0u0t5K0`4?5B3!55014 323@3T45544}64575g675b2m5e4a594d680z3x5S5m5w5y0d6t5^3C6q0G0s0^021m0H0p0g6B0l6D6F6C6E1i0A0O0H0N1=0,0d5G5I0d0Z0)0O3(5=0w0)2K0C1=6X5.5:6#6G6I6/6E6;0g5~6v1a63652a3@3_536{6d4P6~6g2w6i4x6k3r6 3W6t6u5*420^0p6D3(5(6p5v0H0^0j7l7f010F0N0^0W6^605L6a56504d4f706b49784c3r4f0d5c77587K4e1-6n047d5)5_6q5o040R4p7r7Y5v5U042k220K5J7z7X6w7n5x042)7(7?355V0A5X1p7z7m5#0^5}7z5 30627H0q7D3r4B7G7P6e4A755d6c5f738j2U3x7W7W835+047i0#0Q7{5M2g7o040e7q7;8u7g7,0A7.7:897)84040T6_4I5,0G6,0m5;5?8T5`0^0V7y8O4{8b8d0v4S8g8m6j7R4S7N6h8;7J4z3r8/7c7d8I017!2N0p5?0A8A8U8w7j8z875R0z4_4X4:4Z4-1q0p4$9l2!2V0E1:9i0z4!1w7A4)2N0F0q0R0E0P0K0q0r6 1i1k1m1o0d86301D3A1x0f0Q0d0K0o0N0G5;0d0m162G6#0)5G162I0)3(5;0w2l0=0O9M861E050l0Q3A1)040E9@0C0d6S7$0A2P0N1Z4^3k042{0H0L2O2Q9fac9N1q9 5 9|3A2.3#1N1P1R1T1V1X1Z1`1(1*1,9x6q2t2k2m0^0x1W1Y97824/5L3X5B9g8a7C660D0X3s3H718n6kaY3t8^768`7Q4za(2e4t3K4M8=a.aZ8qaE5v7!5q8#6q7^5z827s0A5E046U2wa 5N0^5Qb38P8v0s5W7/818*8B1^5$985T8V8X8Z5@be7|bn0^5|8)4WaU6c7DaY683ba#a@4QbF8k8h8obL3Ia=7Ia-bK3p7T6o7sb190bvbm0:6y6A6K6J6H6=b*6M6O6Qa43bb86*9M6Z1;5?6%1=6)6W5-5/8Y6.b*6?6?bA5t4H71bE3^a!8ba$4caY3_a*8lbS8icia:4LcmbOcda`8tb47h9bbp6q8D8G2~7=b$7t7v047x9db#7BbDaWaY7F69bI8{bU7M7Oa,cn7SbQ4vcga^cQ7Ucvbf5n0^7$bucD917+b`6#cz7@0^7`8Hcwad2Caga819ba8Qbdbl99bh7 bjd3bx045%c|c+3$brc2btdb0:5{9O4kcLcbcO0v8fcRcfbJ3paY4BckbNa%dtcp4u4872dDduc)8s7edg7+8x7kdfbw0:8D8Fc^7}04c?8!cKd6dr6}aX8.cedCchd+dBcXcs8@a;c#dxd*8~dLdNdT920^9496dX8vdQ9c4F9e9g1D4Y9u4-0`ap0`9 a12Ob=0da6d11aab0Zb70}1q4_c02AaL1Z86an1qef0Y1Has2aau1S1Uex1aaA1|1+2odgaG5caJeK5RaP4laR1yaTca8,aW0ha_dvd-4ze(a)cWcr6ke-dFbRdI4ce=a`91a}3Jdl6r7Ve b55F5Hb9cL8$5Pf27~80e bodScF7+6+djc@f76qdnc861e#aVd)e(bGcMe:e_bVd:fwe,fyd@dHc$4QftbWa{2gbZ6ufl5vb(04c6c5b.2kb:6Rb?f5b^6Y6!b|evb fi6-5?fRb,b+6Ifo7Ad(0A3pe(7bbHdwcTf@cdfze^fBcjfDa?f|0Df^fIc*d~930!e2ff4I0J5FesfNd48Sgj8v7-2N8NbBdg5Ogld6bq04f)c3d#gvfm8%e3c,7#7%gegwgo7/gE010H7^c{c:c}d8fcgmdm8%0uf:etac9h2U9v9{9}eg0Na0a2ekem2I5z4_aed0aieu0!g/19eng=ac1sg!eqal0zeA0zeCar4)at1QeIaxaM1!1*eNaD91eRaI04aKayaN30eW9P30e!8+frf?0D0Ie)f`e+4QhAe.8_fAhEaZc!fEd_hFfIe|5,5rgVf0b2gB7*b6b@fdbcfagxbi5YhTfegRdOdif*c/grd~fnd$h;6`e$d)hAfucSbT3ph|bMd;6ki1hLg4h hzbVe{bY6sfMhW2gfPf,6:fT6N6PfW6TfYc0f!b{6$f%fZbsc4f-ii6EgZbC6|hyhAf_fvg0hJcje/iIi0f~g3hIiN7bd|cE3#gb959;gM0Agger0Fh!f9hT7+g@aha9hqh^3#5Od5i:gwgTdah*0^deh,d~fhc1h/i(0ugYh@4@ajeqg$9j0O3A9u0!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

.1280131w ;(=gupyt_hd:)-rP,/n3c2amsobevi7kRlfSq050o0F0l0A0H0L0C0d0y0L0A0C0C0g010l0H0j010406050C0i0B0B0A0s0k040N0D0L0i0)0D0w050v0:0=0@0_0.0j040519121c0v190.0o0H0G0X0Z0#0%0Z0w0h0i0A0h0F0r0j0k0l0n100d0n0H0h0n0L1E0n0l0,050S0E0L0F1l0!0$011D1F1H1F0l1N1P1L0l0s1a1z0X0|0C0j0A0w0%0z011R1n010M0U0F0w0A0B0F1L1-1/1@1T1`1P1}1 0,0a0d0t0s0D0j0D0C0H0 0w0d0Q1+0s0s0F0y2k12220w1a0v1z2x1%1)1(1M0o241o0H0w1|2h1L1i1k0Y1S2H2J0w0D2N1L0j2q1a2v2x2!0/1.2l2P1^2T0s0?0L1L0A1C2q0M0%030m0m0y2U0F1H2S0D0r0z0I0r0b0,0b120A2#2(0-2%232*1T2,2.2:2=0F2@012_2{2}2 2K32341=040z393b1/3d2v2G013i0A2/1a2;0n2?2^2`2|0Q3s2T3u0r0x0,0x3z2u3c1d2Y122N2A0o1)2F3g0%3P201a3(1b3$2$133!3/2Z2(0d0H0o0%2`2v3T363J3~40013O3r2I3t33351?280F413q3Q4c3S4e453Y3D3-010J0,0Q0M3Z3B3e2)1m1T0c0,0d4y2w4A3E0w0M0,0B0D0k1|2J4H3|3f4C0%0+040f4T4J4s0w4v102J0F0C4#4r4W014Y0u4T4G4/2Q3F4v4,0y0s0*0l0F0i0s4.3}4s4Y0q0p4T0.3_4z3D3 4j434e3w052;5g494k2~4m315j4g1~4i5o3/3R5s3v1L0v3a4$4:4E040d5J4G5d4I4_1^0C0o0,020O0i0D0l0e5T5V5X5Z5W0e0K1|0G0D0H1Q0Z0d4O4Q0w2J2m4,0d0G3H520s0W2n0y1Q0Q0C4~505}5$5#5U5%680e5b55235n422(3T3V466h5p5z6k5u1 4j5y5r6q2x3a5K4^564:4u042q0l53115M5I5F4`4(040C0D0=0F6f4B4`4Y4!6J6L2+4)5?0F4,6T3E4=4@6Z3h4|644 0j51536)570,0q6,5O1T0D0,0v6|6B6M0E0,276^4:6W786M6#4+4-6Y6}4X6`6e6Y0v3{3#0F2x3=2y3*122B7u0A1O7p3%1j3d0v0Q0S0U0C04.

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

.1280131w ;(=gupyt_hd)-rP,/n3c2amsobevik9lfSG[q]0050o0E0l0z0G0J0B0d0x0J0z0B0B0g010l0G0j010406050B0i0A0A0z0r0k040L0C0J0i0+0C0v050u0=0@0_0{0:0j04051b141e0u1b0:0o0G0F0Z0#0%0)0#0v0h0i0z0h0E0q0j0k0l0n120d0n0G0h0n0J1G0n0l0.050U0D0J0E1n0$0(011F1H1J1H0l1P1R1N0l0r1c1B0Z0~0B0j0z0v0)0y011T1p010K0W0E0v0z0A0E1N1/1;1_1V1|1R1 210.0a0d0s0r0C0j0C0B0G110v0d0S1-0r0r0E0x2m14240v1c0u1B2z1)1+1*1O0o261q0G0v1~2j1N1k1m0!1U2J2L0v0C2P1N0j2s1c2x2z2$0;1:2n2R1`2V0r0^0J1N0z1E2s0K0)030m0m0x2W0E1J2U0C0q0y0I0q0b0.0b140z2%2*0/2)252,1V2.2:2=2@0E2_012{2}2 312M34361@040y3b3d1;3f2x2I013k0z2;1c2?0n2^2`2|2~0S3u2V3w0q0w0.0w3B2w3e1f2!142P2C0o1+2H3i0)3R221c3*1d3(2(153$3;2#2*0d0G0o0)2|2x3V383L4042013Q3t2K3v35371^2a0E433s3S4e3U4g473!3F3/3H0.2s0F1~0i0B0m0F3J410E0B3#3D0d3g2+1o1V0C0.0g4I2y4K4t4N0)0-040N4S3~3h4W4v041~1)0E0E4#4U3 4u0H0.0K0C0r4/4L3G0v0.4+2s4.3{4J4|4u0C0c0.2K4{4V2S4)280A4H534T554(4?040G0K5b4;4(4~4*0v4,522(5c1`4Y4!5i4$4M5d0B3y020O0i0C0l0e0M2g0%5J5L5N4#5k5d4Y0P5q4%5d4P04020h5U5D4:5#1`0A0G0.0Q5V5z1V5Y4#0:5D4|414l454g3y052?5 4b4m304o33624i204k673;3T6b3x1N0u3c5|5y3 66442*3V3X486r686i6u6d214l6h6a6A2z3c5W2-0.0A0C0k1~2L4C4E0S5!5F1`5%4R5,6J3j6L6N6P5x3$5^4X0.0f5@5r5d5t4x4z4B4D1J0S5h6p5.5_0.0t6U3G5H0.5S5M5O5Q0B765+6}6V6 040p5{5V0u3}3%0E2z3@2A3,142D7s0z1Q7n3)1l3f0u0S0U0W0B04.

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

.1280131w +;5(=gupyOt_hd:)-rP,/n3c2amso6b{ejRiv7}klfYS[q]04050r0K0o0D0N0S0F0d0B0S0D0F0F0i010o0N0l010406050F0k0E0E0D0v0m040V0G0S0k0^0G0z0d020D0E0l0f0d0M0K120v0X0k0K0F050y0 1113150}0l04051A1t1D0y1A0}0r0N0O0-0/0;0?0/0z0j0k0D0j0K0u0l0m0o0q1c0d0q0N0j0q0S1)0q0o0{050(0I0S0K1M0:0=011(1*1,1*0o1=1@1:0o0v1B1!0-180F0l0D0z0?0C011_1O010T0*0K0z1g0K1:2b2d2i1{2l1@2o0E2q040a0d0w0v0G0l0G0F0N1b1d0$290v0v0K0B2L1t2s0z1B0y1!2X2527261;0r2u1P0N0z2n2I1:1J1L0.1`2+2-0z0G2;1:0l2Q1B2V2X310~2c1d2?2j2`0v120S1:0D1%2Q0T0?030p0p0B2{0K1,2_0G0u0A0Z0u0b0{0b1t0D32350|342t371{393b3d3f0K3h013j3l3n3p2.3s3u2g040C3z3B2d3D2V2*013I0D3c1B3e0q3g3i3k3m0$3S2`3U3s0{0A3Z2U3C0}3%3G0?3*3,053.3:3O3=3R2,3T3t0u0!0{0!3~1u403E361N3H0G3a3+3K3/3M3;3Q3@4d3_4f0g0{0g4k3141353(454u493P3?3o4A3r4f0H0{0H4G4m424p444r3J3-3L3N4O4c3q3`0P0{0P4X3#1E2 1t2;2!0r272)43014P2:1K1B2~0K303C3 4?4P572t0N0r0?3k2V3`3w4(5e5g4y4Q4-4f3w0d2y0K5n4P3^4S3u5k3~4Z2@3)0{2d2-0K0p2w0E1s4l3#0d4n3(0G0{0i592W5Q5D2j0`040J0Q5W3D5O2W5R5m015h353`3W470d5.4b4z5q3V2h5u5w4,4e5}2X3A0}5+5c1d5_0p5i4f0A3K6a5x4R3`6e5t2p605{623{64683(0R0{0T4r5)5Y4J4 0z0{2n250K0K6y5R4 0G0c0{2,6I5Z3H6v0*5M5)6J4!015#0s5)66333%6a6c3u4h5l5f5/5o5y3`4h6l2z6n5p6p6,3Z0d6~6z3F6X6u040N0T6P6A6X6C046E2Q6H676W5E5#0W6V6Q0?0F3W021p0G0o0f0U0K137p0k7r0f7k787h0{0Y77715E6L0{2`0o7G4o7I6M740z7N4K5G0z5I5K6T5N6%7C5!0{6!676$586(6.5:2d3`4D6-6_6;4C5~6m6/6h5|0u7=6}6 827g387V7X5L7!7,7$1{7i7B7H857b0z6F7e7#8f8c0{7j7f7l017n0{7x7z7u7w7q7s8e7O7%040Y7F67708C1{5T045V8H841{0E0N3x6#8B5^7.6b5;4T6f8X7}6p4U6@5v7|614B3u4U6r838r733o0F8k8a8m0?6Z8U8q4J6)8Z3u4/7?8,6o8.0u4/8*7@6i4f9581826~8P44866G7Y0S6U908|6Y8o8V6B6D8i7d9v6X8d9r8J7m7o8z7t7v0v8v8A9D3(5#8F7T6K0{0e8N318I3(8R8T7*6V0y5b4@564_531t0o4|9-2%2Y0D1?9*0y4`1z6s4 2Q0E5K0D0R5J0q6e041l1n1p1r0d7)331G3D1A0n1d2H0k2P0)0o0d0D0k0;0N0d1a0*0N8_0v0d0/0d6w0z2S0N1$055b2~0G0L2R2T9%3n04ab1E3D2;3(1Q1S1U1W1Y1!1$1}1+1-1/9|6X2w2n2p0{0w1Z1#7S7f55683!5,9(7-5n6c0b3v8#9d5qb15s5 976`4Bb62h4v4*5`ba4Sbc6r9k5F045H9n889R6X8L9V3C9X4 5#5%8 8l698Xb00u5?3e6g8-bibF7`6^b97^b12g4)4x8%bbbL6r7+4?a~6/bEa55@bI98bK6kb8bgbP3{bS4a6:9eb1b%0y3Abl736w0vbr5E7abo8`5Pbl7J7Rc08gaJaLaE1c9A7D040hcf8gbq9Nbx0{0xc91{8t049L9I8y7y9MbB9O0{0tac4m9N927:0Ab16|bH8$bJ3scJbM8+b.b@4gbd4NcSb5cU8;6 b|6N768O8rc27W6Gcq0?c77Lc.01c76Oc)8b9lbnc,5Jclczcn04cD3#bY5,b!7/0zcO7 b3bOcT4D9cddcYdfbebTcNcIdbc!9ibw799mc~7Zcj8n048pd0dsc|5Idw8}7Ec=btc=9Z043y9#cFbD8Zb18:b(cMb*da8)b-b?cY8)dkb=bUbKdSb`aQc#8?6D0+c4d6c`9td2bA8{bCa dQ9adccX4eb19bdYd(da9bd$4+dVdn9gd+dq9jc*dt9o9qdAcgdzd`7UdCc-cm9BdGc_9s8L9UdJ8SdLd_4?aO0$2Xa_9+0O5*0$0(0*0F04.

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

.1280131w ;5(=gupyxOt_hdN:)-rP,/n3c2amso6beRiv7klfS.[q]04050r0K0o0E0M0Q0G0d0C0Q0E0G0G0h010o0M0k010406050G0j0F0F0E0w0l040S0H0Q0j0?0H0A0d020E0F0k0e0d0L0K100w0V0j0K0G050z0}0 11130{0k04051y1r1B0z1y0{0r0M0N0+0-0/0;0-0A0i0j0E0i0K0v0k0l0o0q1a0d0q0M0i0q0Q1%0q0o0_050$0J0Q0K1K0.0:011$1(1*1(0o1:1=1.0o0w1z1Y0+160G0k0E0A0;0D011@1M010R0(0K0A1e0K1.292b2g1_2j1=2m0F2o040a0d0x0w0H0k0H0G0M191b0!270w0w0K0C2J1r2q0A1z0z1Y2V2325241/0r2s1N0M0A2l2G1.1H1J0,1^2)2+0A0H2/1.0k2O1z2T2V2 0|2a1b2;2h2^0w100Q1.0E1#2O0R0;030p0p0C2_0K1*2@0H0v0B0D0v0b0_0b1r0E30330`322r351_37393b3d0K3f013h3j3l3n2,3q3s2e040D3x3z2b3B2T2(013G0E3a1z3c0q3e3g3i3k0!3Q2^3S3q0_0B3X2S3A0{3#3E0;3(3*053,3.3M3:3P2*3R3r0v0Y0_0Y3|1s3~3C341L3F0H383)3I3-3K3/3O3=4b3@4d0f0_0f4i2 3 333$434s473N3;3m4y3p4d0I0_0I4E4k404n424p3H3+3J3L4M4a3o3^0O0_0O4V3Z1C2}1r2/2Y0r252%41014N2.1I1z2|0K2~3A3}4;4N552r0M0r0;3i2T3^3u4$5c5e4w4O4+4d3u0d2w0K5l4N3?4Q3s5i3|4X2=3%0_2b2+0K0p100m0M572U0d4l3$0H0_0h5M045O5B2h0P0C0_0s1a0K5U0{4j4;3#5k015f333^3U450d5.494x5o3T2f5s5u4*4c5}2V3y5P4}0A0_5J5L5+5N664Y015R045T6c5V6e5C0F0M0_0X5)5U5P5_0p5g4d0B3I6v5v4P3^6z5r2n605{623_643B6k6u5d5/6w5;4d4f5j6Q5`5n6K4f6G2x6I6Z4z3s6V5A4H4}0P0_0R4p5U5W6.6f68045F0K5(6k6^3D6f0H0c0_2*6@6m365E0A5G0p2u0F1q6O5X1_0^040t6s7i4H6v6x3s4B6W6(5w3^4B6$5t6R6C5|0v7u3X0d7I714m5C6:040M0R787j427b7d7f7h317S017l0U6t7Z6{6}6 7Y6_5C7l0W7R7-2h6h020i0o0e7;725C6{6a7%7=7k0_7n6k5*7,5b6X6S2b3^4S7v7C616*0v4S7A7w6D4R1.0z3y7J8s7K4I690E5K7|7L7?5S8z8v6|7c6~7e0(7g817}2h7#8L8A3F7U6~8P3$7/7o881b7r6T3s4-8f6Y7x4d4-8l8g6J8i8%7H8t7I798R8F7d80708^0;6h6j2 8u678S7+4k6O0z594=544@511r0o4`9f2#2W0E1;9c0z4^1x5a8Q0;2O0F7e0E0P5H0q6z041j1l1n1p0d85311E3B1y0n1b2F0j2N0%0o0d0E0j0/0M0d2a0w3k9Q0M0w0d1=0*051k7O0o1k7h9.0d0r0j9@0M2Q0M1a2m9(1?851F0Z1I3$1O1Q1S1U1W1Y1!1{1)1+1-9r3$2u2l2n0_0x1X1Z0A6t539r3Y2U059a5-8a6x0B3t6A8a7D4caC5q5 8.6)4QaI2f4t4(8)8naO6M8~5D8`8H8|92aW908D6/5!045$2+8X56az5laB0v5?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}7l0ya(6`0_2^0F0J2Ob=5C7476arb*9saX7*8I0Q8K7pb+8 0_0Tb.b?9/9;cd7.0_0g0u9I978Y5^bo8c0BaC7Ga^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;993l2Vat9d0N6N0!0$0(0G04.

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

.1280131w +;5(=g8upyxt_hdN:)-rP,/n3c2amso6b{ejvi7}9klfSG.q[]04050s0M0p0F0P0U0H0d0D0U0F0H0H0i010p0P0m010406050H0l0G0G0F0x0n040W0I0U0l0{0I0B050A12141618100m04051o1h1r0A1o100s0P0O0:0=0@0_0=0B0j0l0F0j0M0w0m0n0p0r1f0d0r0P0j0r0U1T0r0p0~050+0K0U0M1A0?0^011S1U1W1U0p1$1(1!0p0x1p1O0:1b0H0m0F0B0_0E011*1C010V0-0M0B0F0G0M1!1 21261,291(2c2e0~0a0d0y0x0I0m0I0H0P1e0B0d0)1}0x0x0M0D2z1h2h0B1p0A1O2M1_1{1`1#0s2j1D0P0B2b2w1!1x1z0;1+2W2Y0B0I2$1!0m2F1p2K2M2?11202A2(272,0x150U1!0F1R2F0V0_030q0q0D2-0M1W2+0I0w0C0g0w0b0~0d0b1h0F2@2`0 2_2i2|1,2~3032340M3601383a3c3e2Z3h3j24040d0E3p3r213t2K2V013y0F311p330r3537393b0)3I2,3K3h3m0C3Q2J3s103U3w0_3X3Z053#3%3E3)3H2X3J3i0w0%3m0%3=1i3@3u2{1B3x0I2 3Y3A3$3C3(3G3+443-460g3m0g4b2?3^2`3V3|4l403F3*3d4r3g460J3m0J4x4d3_4g3{4i3z3!3B3D4F433f3.0Q3m0Q4O3S4z3v4R3W4T4k4V4m4X424q4!460k3m0k4)2L4+4f2)4.4j3}3 4n414p4H4_3j0S3m0S4~3T4A3`534U3~4W4o4G3,4J3j0b0$0~5t5g504B4/555n585p4I3.0b3l045H5x4e5z544D574Y4^455s3M0b3P0A3q3?4*5M5j4C4;4E4@5a5T3k0C5v3;5Y3R4 5$4-5(5m4=5o4Z5-0b485J4a5=5!2L1s2;1h2$2P0s1{2U5j4G2#1y1p2:0M2=3s651p4G6m2i0P0s0_392K5G3A6t6v595q6y0d2n0M6B5E5b3k1!644Q520B0~1x3b0q1J0B2F0H6o0d5^520I0~0i6Z6#270}040L0R6o104c3S5M6A016w2`3.3M5m6_5+6D46246F2d6H6`6C5F736M5Z6O2}0~2e0-1(0l0x6U2b2F6*7e1,6%046)6?2L6!7q0_0T0D0~0t1f0M6;6o6^6u786x465/4V70796K5/752e6I5~4s3j7N3=7y3W7g0F0o0P7p5i4-7s7u2?7x7,520G0P0~0$7G7v6r2A7P7L3j616 7J717a81256G7V5S7X477c3t7|7I6B800w4u7O847Q5-4u7T77856K8l7!7=270T0~0V4i7+4,6P0~6V6X8D51270I0c0~2X8J4B0~2:0I0N2G2I8g7#6-0h7H7#6Q042l0G6Y8Y8x1,6-0z8Q5j0H3M020Z0l0I0p0f0X7n0M0H8_8{8}8$8.0_6-0v0u7{2^3U7 6|4K6z8n6J5-4L8r8a5,8c4L2M3q0d9u7;8E7f040H0I0l0H7m6W918=7-6(9H8F048H9G8-9x7r0~0Y969Q3{0~1 1W0p9U8K8/0~8#9P9$0_8@0~938|0f0z0d9/959*3V999c6n9e8n8j4$8m9o723j4$9n789k8ca13Q9v9w9+018z8)8C7|ae8R9M909K8L8N048Pak6+3x9X9B9D9N8,9d97016-9b7|6=aC6s9 9g3j4{a2a87W5r0w4{a78t5-aOacad9vav7z8O0Vapawan9Fa*0_8M0~2,9!au7#a:as1ga@aD8(6S0I9E8I9_5jaF9|6@9~8iaM0w5daPaW8c5daV8obf8ea!blal5%6R0P6TaA9#9`0~0!btboa,7ob34-6-0#a.017.bF7@5vb666b87Kba5t9ia3863k5ubha9aSbQ9s3Nbma$ag0~3d0H7FbB52b5aHbt9f215G5I83bS6K5H8876b`5 b^5=bma!b%a~bqb0bsb-6,bvbx5_8Gaoca9%04bEa|9VbG0~0e7/3sbn4-bJ5JbL7}0db=0B5G6~337PbXcBb}7UaQ8bbY6~c2b$7#ah0Pa)clafc6br90aB9}aD6-bwch9Wbzb,aJafbDbF7s020j9^7:c57%7)cdb.0~aG4yb;aLb?460b7ZcD9jaR5G7S89cJ9pbY7ZcNc39uc@047h0U7j7l9Nc.9JcTamdob:9_cz5G82d5b 8c60cH8sbibY82dfdgdi15c_dr5jbHdNce04a b19Oc+bu04c$dWbydkdmdUc`cbcjcw1h6q676l696i1h0p6cd?2S2N0F1%d:0A6a6=0)0+0-0H04.