Aller au contenu

✂ Fusionner des tables

On considère dans ce sujet les trois fichiers csv décrits ci-dessous :

countries.csv contient des informations décrivant les pays :

  • CountryCode : le code du pays (texte, clé primaire)

  • Name : le nom du pays (texte)

  • Continent : le continent du pays (texte)

  • SurfaceArea : la surface du pays (nombre décimal)

  • Population : la population du pays (entier)

  • Capital : la capitale du pays (nombre entier correspondant à un ID dans le fichier cities.csv)

  • d'autres descripteurs qui ne nous intéressent pas ici...

languages.csv contient les informations sur les langues parlées dans chaque pays :

  • CountryCode : le code du pays (texte)

  • Language : la langue concernée par cette entrée (texte)

  • IsOfficial : cette langue est-elle officielle dans ce pays ? (texte, T pour True, F pour False)

  • Percentage : le pourcentage de locuteurs dans le pays (nombre décimal)

cities.csv contient des informations décrivant des villes :

  • ID : l'identifiant de la ville (entier)

  • Name : le nom de la ville (texte)

  • code : le code du pays dans lequel est situé la ville (texte)

  • District : la région d'appartenance de la ville (texte)

  • Population : la population de la ville (entier)

Import réalisés !

Dans toute la suite du TP, les listes pays, langues et villes contiennent les dictionnaires correspondant aux imports de ces différents fichiers.

Les données sont correctement typées (en particulier les valeurs isOfficial de la liste langues qui sont des booléens).

pays = [
    {"CountryCode": "ABW", "Name": "Aruba", "Continent": "North America", ...},
    {"CountryCode": "AFG", "Name": "Afghanistan", "Continent": "Asia", ...},
    ...
]

langues = [
    {"CountryCode" : "ABW", "Language": "Dutch", "IsOfficial": True, "Percentage": 5.3},
    {"CountryCode" : "ABW", "Language": "English", "IsOfficial": False, "Percentage": 9.5},
    ...
]

villes = [
    {"ID": 1, "Name": "Kabul", "code": "AFG",, "District": "Kabol", "Population": 1780000},
    {"ID": 2, "Name": "Qandahar", "code": "AFG",, "District": "Qandahar", "Population": 237500},
    ...
]

Langues parlées dans chaque pays

Quelles sont les langues parlées en Haïti ? Pour le savoir il faut :

  • parcourir la liste pays jusqu'à trouver le code de Haïti (orthographié Haiti dans la liste pays),

  • parcourir la liste langues et en extraire les valeurs correspondant à ce code.

Langues parlées en Haïti

Compléter le code ci-dessous permettant de déterminer les langues parlées en Haïti.

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

.128013fL+]!gSa:.C3/9mocbPérhd_)wi;tsy(25Rq4e7k8 [n6=puêHNv10l050x0M0D0i0B0%0E0Q0r0%0i0E0E0U010D0B0V010406050E0W0p0p0i0v0F040h0q0%0W0{0q0S0Q020i0p0V0C0Q0J0M150v0K0W0M0E050n12141618100V041w1D051G0n1G1I1D100x0B0!0:0=0@0_0w0B0g0w0%1W0w0D0~050+0s0%0M1R0?0^011V1X1Z1X0D1)1+1%0D0s0q0x181(0v1E0D0w0:1b0E0V0i0S0_0H011-1T010b0-0M0S1j0M1%282a2f1/2i1+2l0p2n040a0Q0t0v0q0V0q0E0B1e1g0)260v0v0M0r2I1w2p0S1E0n242U0D2221230x2r0_1Z0S2k2F1%1O1Q0;1.2(0B2*0S1~1P1%0V2N1E2S2U2 11291g2:2g2^0v150%0~0Q0#2R330 322q351/37393b0H3e2a3g2S2%013l0i3a040Q0m3p2T103s3j0_3v3x0Q0L3B3r333t3H3b0I3L3D3N3F3u0q383w3b0T3S3h341S3k3X3m3y0N3$3E3)3G3+3Z3y0P3/3U3;3W3Y3I0o3`3i3|3P040#0$3L1F2}1w2.2X0x2#3t0r1~2x0(1P1E2|0M2~3f484h0)4p422;3u0~0B0y0w0,0{3L0Q3%3t0q0~0U4E4G3V0p0B0~471x3f3T4v2g0O0~0A1V1+4L3:4w0S0~290F1v4S3q4M3|0}040R484%364y4A4C0B4^3{4w4=0e4@4.2T4:4w0E2d04010Z2m014 4V1/524$502g4I040f4K553y572g590~010Y4}5f5r5t5i0~0j3S0Q5H4F4_3k4{4B2H4~5r5J5l1/5n0d5q2 5R5h0_4O0~3d5r064U3(4(0~4s0M5k5Z015n5W3f5Y5+4`044+4-315K0_4=545 5S3G5M4}5g5`5D0453693t5v5b0l0q0W0S2Y0F6i0)5A645;5j5(5*3O0~0=0S0g1t0E4|5O5:6a0_5?6F3t620e416G014X040b3X6J3V4)042k2Y0M5/5Q5C6H0A4y0S6U436x2a6A1u6e3V4=5F5(5I5_3t6Q0B0b6,5,6X6l2N6#6r6O626=3|6g016i6k6m6o2n79510~6M6$605=4J5@3q6{6V5-4i7i2g6@5G6`5I6%4x046y6:6C5N4D5B7n5n0k7w5L040i0V0V2k0x7O610~0G7W7D6Y747!4=0z3$0n5.2U4n2U4c1w0D4e7=2Z2V1}1 2X0i1*4o4b4l1C4u6O2N0p0y0b0i0O0M4A0m0~1o1q1s1u0Q6^311J3g1D0c0i0Q1}0W0;1,055.3t1;1Y1!1$846|4Y4!754q7,4i3y0x2a0/0=0Q2N0r0w0M0v8T1,0x0W262K0x005y5O0Q2E0W2M4C0Q0i0W0@0B0Q0X6Z8R1p0V0=0r0u1,290v0Q6k4F8y3V8A1?1#2o656P0~6S0v488K4t8:0r4h1k0i0g0S0u0Q2K0%002?0E2Y8u2I964i8z1!9a8D7C6Q0s2N8a9i7-0Q1s8@2?0D8V2C1k0D0Q8Q8t8v8k1F3g2.9E1=8C2{4a8m317-9I9f6T7m9d6W7$6!705m6)042?9}7P5}7(5E7z5H9=a06 9^5;9`739|7K9d78ah5;7b5d2w6q4q7n6t5X7C5?7q2T7s7a5a5x5za5048l4T7A7B7n6W5.a26H4JaM7#af8I4/ar0~63aq9d7b7d736n4iapaTai7ka77Aa99K0M9M5(1w9;1J4a0n4c10a`0*0,0.04.

Le descripteur CountryCode permet donc de faire le lien entre les deux listes pays et langues.

Utilisons cette relation afin de déterminer les langues parlées dans un pays quelconque.

Langues parlées dans un pays

On demande d'écrire deux fonctions :

  • code_pays prend en argument la liste des pays ainsi que le nom d'un pays et renvoie son code ;

  • langues_parlees prend en argument les listes des données des pays et celle des langues (arguments pays et langues) ainsi que le nom d'un pays (nom) et renvoie la liste des noms des langues parlées dans ce pays.

Exemples

>>> code_pays(pays, "Haiti")
"HTI"
>>> langues_parlees(pays, langues, "Haiti")
['French', 'Haiti Creole']

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

.128013,L]xa/cP_i;y(25qe7î8jVOpôHv1)0f:gS.C39moàérhdwtsERùl4kï [n6=uNb050T0r0V0f0k0!0W0(0h0!0f0W0W0,010V0k0y010406050W0-0N0N0f0R0m040I0O0!0-130O0*0(020f0N0y0l0(0Y0r1d0R0q0-0r0W050g1a1c1e1g180y041E1L051O0g1O1Q1L180T0k0B0{0}0 110S0k0H0S0!1(0S0V16050?0/0!0r1Z0~10011%1)1+1)0V1;1?1/0V0/0O0T1g1:0R1M0V0S0{1j0W0y0f0*110o011^1#010F0^0r0*1r0r1/2g2i2n1`2q1?2t0N2v040a0(0i0R0O0y0O0W0k1m1o0;2e0R0R0r0h2Q1E2x0*1M0g2c2$0V2a292b0T2z111+0*2s2N1/1W1Y0|1_2:0k2=0*261X1/0y2V1M2!2$37192h1o2{2o300R1d0!160(0C2Z3b173a2y3d1`3f3h3j0o3m2i3o2!2/013t0f3i040(0L3x2#183A3r113D3F0(0#3J3z3b3B3P3j0p3T3L3V3N3C0O3g3E3j0+3!3p3c1!3s3)3u3G0s3.3M3;3O3?3+3G0u3`3$3|3(3*3Q0M423q443X040C0E493:2|453@0C3l1F3n3#4a4i4c0C3w4n3y4p4h3e3~3F0C3I4v3K3/3W4A160C3S4E3U4q4z464J3Z4M4x4H4Q4d3-4T4G3%4s3_4Z3{4r4I4d414(434*4W0C484M1N351E2_2)0T2-3B0h262F0:1X1M340r363n3T05500;584O1`0$160;0F5a4)2o0U3j5l4/3e0F165c0r0j2h0m1D4@5m1`15040n5q5f3O165y5A395C115E0b3T0(4!4b16300N5H4y5D160D0G4g3B5o3G0(5-5Z3B0W0T16015@1w0*0B0O0k1@1?2e2S0T000-1o5L5@013!5-5.5O015h040F3)5S5U4r162s2*0r0r6i6c0O5+2~6q5r3s5K0f5z5/3%5E5(4T6a6G5T6c6e0k5k4M6I6w5J046m2V6p5B6P015E0)6B440W2l04010.2u686V5I6X160d6v6.0O160,0,6=5!6Q5X6!4i6D696H736j2o6e2V0V0-0R0*6{3W6l0*6n6U5N6W6Y6 2o6$5?0K0O642*0m7q0;6,7j6.5E6;4T066G755g160R0@0W7i3n6O6.2=160w3E1B0X2U6h6-6|6/5F7m1`7o6(0c1@5X0(0*000f0y2h7I0t0V0(2h0`0T2i0`0}0(1+0W0V2v7#5P5$3!064U3%6e5j84015+5T7X3W5t040}0*0H1B0W5x1e1?1C8d5E5G8h4#6y6A8x445Q7d8y8k2i8n8t8B70165R6N7F6}0O5Y8K2o5E5%5)3%8f6a8d5;5?5^2s5{5}7 0f7 0k811@0;0`5X7`1C8,8m8o7^8r0Q8_7{0*7}1@5L0(2~1W1A0Q8}0R0(0W1n7,8R67726b6W0*5u518E446@046`8O6c9m045v8q8A7y7Y8v8d9w5L8u8M9p6k046~8T5#040D877E9v7H1C0-0!0?0V9J2o9r9t377N9C160)7B377D8!6J166g0R9!6x6R7g6T9^116s166u9u9l168l8I5M596c716F739)3B6K6M9(8P3C7f7h9H046Z9N117%017q7s1f7v83ap7Z9-7Mai9$9%aB9T9x9oayaa9.ac6Hai9w2V1a9X0f9Zay9r0J9E167/0y2s0Tam8w9B7e9`alaJ9+8#6%010c8H0-0f0Haxa*6C6:9Q7C9S6W770=7a7ca27O9UaR9Y3.0g5v2$562$4{1E0V4}bj2+2%25272)0f1=574`541K5e7Y2V0N0j0F0f0$5w0S0L161w1y1A8_6E391R3o1L7q9{0@bA6m0(0P7 000r0e1x0y5 2S0A0f0%137^0R0Q0h0Q0;7g0b0(9fa#1l960h0k0(1l0^8/0r9c641@250-0|1@5b513B1|1*1,1.byae9=7WbPbe9d7|0(0f8*9c2V507a0`bZ0!002~810Rcb2Q5T5vcg1,1~1-2wb2160/2VbE5abd51040J0(0X1o0r0F0F0=b`5 ce5d78b51Ecq0v7r1@0h1@0R0z1?aXbQbx0x1o8-2Sb)0-0`0fc?1l9a7~1~2=cJcf3%chcNckai777J7L3yad4#2F7R1k0r7U2K9@a.7!ayar7)9g0N7,7.7:1e0f7?8}7`csdc8/827xa87k864@cW5dct2q2R1@0H0Q2V9c1?0`0h0~b{0Z7 7*8RdM0W9a2sct0R8n2E7g7,c^3)aQ2M0*2.bZ0fcb648}5zcZd10(1C7@91d,c^d.2S2q8n2V9dc1cC9f8-c%c)2X0-db8-0V0O0?1+0V9a0T0-9bcy0R0`0n2S7~caccdf2SdhcMcjcP6.6e9?cVbe0Dcr92ctcv0(2V5`0O0meGc`0QbaaTc~1U4`0=0@0_04.

Capitales

Quelle est la capitale d'Haïti ? Là encore, il faut :

  • parcourir la liste des pays jusqu'à trouver l'entrée correspondant à Haïti,

  • repérer le code de la capitale correspondante,

  • parcourir la liste des villes jusqu'à trouver le code cherché.

Nous allons effectuer ces actions pour chacun des pays présents dans la liste. La capitale étant trouvée, nous ajouterons une nouvelle clé CapitalName au dictionnaire du pays. La valeur associée sera le nom de la capitale obtenu.

Pas de capitale ?

Certains des « pays » listés n'en sont pas vraiment et n'ont donc pas de capitale. C'est par exemple le cas de l'Antarctique.

Lors de l'import des données, on leur a associé la valeur -1 à la clé Capital.

Liens

Quels sont les descripteurs permettant de faire le lien entre les listes pays et villes ?

  • Le descripteur "Capital" de pays et "Name" de villes
  • Le descripteur "Name" de pays et "Name" de villes
  • Le descripteur "Capital" de pays et "ID" de villes
  • Le descripteur "ID" de pays et "Capital" de villes
  • ❌ Le descripteur "Capital" de pays et "Name" de villes
  • ❌ Le descripteur "Name" de pays et "Name" de villes
  • ✅ Le descripteur "Capital" de pays et "ID" de villes
  • ❌ Le descripteur "ID" de pays et "Capital" de villes
Associer les capitales aux pays

Compléter le code ci-dessous afin d'ajouter à chaque dictionnaire correspondant à un pays une nouvelle entrée CapitalName contenant le nom de sa capitale.

On utilisera la chaîne vide "" comme valeur pour les « pays » sans capitale.

Ainsi :

  • le dictionnaire correspondant à la France contiendra un nouveau couple "CapitalName": "Paris",

  • celui de l'Antarctique "CapitalName": "".

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

.128013f+]:gSaFCD3/9mocbPrhdwitsyI254e-7k8 [n6=puTNv10l050v0F0y0h0x0W0z0K0q0W0h0z0z0O010y0x0P010406050z0Q0o0o0h0t0A040g0p0W0Q0;0p0M050m0{0}0 110_0P041a1h051k0m1k1m1h0_0v0x0T0)0+0-0/0u0x0f0u0W1A0u0y0@050!0r0W0F1v0,0.011z1B1D1B0y1J1L1H0y0r0p0v111I0t1i0y0u0)140z0P0h0M0/0C011N1x010b0$0F0M0h0o0F1H1/1;1_1P1|1L1 210@0a0K0s0t0p0P0p0z0x170M0K0Y1-0t0t0F0q2m1a240M1i0m1+2z0y1)1(1*0v260/1D0M1~2j1H1s1u0*1O2J0x2L0M1#1t1H0P2s1i2x2z2%0`1:2n2R1`2W0t0~0W0@0K0U2w2+0^2*252-1P2/2;2?0C2_1;2{2x2I01300h2=040K0l342y0_372~0/3a3c0K0E3g362+383m2?0D3q3i3s3k390p2:3b2?0N3x2|2,1w2 3C313d0H3H3j3K3l3M3E3d0J3Q3z3S3B3D3n0n3Y2}3!3u040U0V3)3J2S3#3N0U2^1b2`3y3*3=3,0U333`353|3;2.3U3c0U3f423h3I3t470@0U3p4b2z2!0F2z2P2C0v2G380q1#221i4o1l2#3I2(2`054t0Y2$3Z3=0I0@0b3C3q0K4d3A0M0@1~2D0F0F4N4P3!0p0w0@2U4X3R3~0@1:0A0z3q4Y3=0?040e3x0K4_4O4)2.0@0q0h0P2l3b4W4j4{4H1`0p0@0O4(572 4S0M4U542)4|1P4=0L4/5k0/0z1@04010j50522=5o5d0/4=0d4^4`4:1`4J040x0b5c3}4}044 510!1L5M451P59040O5b555G5W0@0G5z5N1P0o0x4g5*5V5B0@4@4j064`5`565+3l5f5h5:385m613A5r0@5u5w5S0S2022643!5C5U385X5!2%5|5;01665t015E4_5$0/5I0F0%5i4C5p014=5@2%5_5{6t6B4R040b0#0y6h3A6j6P3!0I0q0@0i3b0z6z436H6I5A394$6S3=6R5#6B5-0@3/5^6$6m385I0w1z5T6.6(4!0@2W6O6~5}6)6L6N6e4;5?6s6@6^4Q0@0T0$6}6l6u016-7k6J7g7i0F4.4j7l637u7p5J791`6g6?7d6%755I5K6+5O7h0W7j6A6(7w5j6(6p010B0k6r7x7P0@5D746n6j6k2`7e3+4~69537A5l7b7D7E5`7l6K4T2s6!2y7v0@5n7Y757T5v5R3b6b2b7:5=047#7o6 5a7J5e047L7N357 04817R835s01886d826n7C6F7@5{7_4K787$6i8g8F3A6U0@0R0t0Q7}0^8A7l6w6y8a6C7=8z8A5F7y0x8h0/5X0c7)357+3=6:3-3H0m4E4m1j4z0m4x2A4q1a2D2C1!1$2C0h1K8@8`1t2{8`0Z0#0%04.