Chapitre 5.4 - Fusions
On considère dans ce sujet les trois fichiers csv
décrits ci-dessous :
Les pays Les langues parlées Les villes
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).
Python 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.
.128013ue6LRSytwê37sH1 9d/oa+=gi4vpr._h;fnklqm5b)c]C(N!P08[é2-:050s0c0i0v0z0L0n0q0R0L0v0n0n0x010i0z0C010406050n0b0N0N0v0D0h040g0u0L0b0|0u0J0q020v0N0C0H0q0f0c160D0M0b0c0n050t13151719110C04051E1x1H0t1E110s0z0B0;0?0^0`0?0J0y0b0v0y0c0%0C0h0i0G1g0q0G0z0y0G0L1-0G0i0 050,0P0L0c1Q0@0_011,1.1:1.0i1_1{1@0i0D1F1(0;1c0n0C0v0J0`0$011}1S010I0.0c0J1k0c1@2f2h2m1 2p1{2s0N2u040a0q0X0D0u0C0u0n0z1f1h0*2d0D0D0c0R2P1x2w0J1F0t1(2#292b2a1^0s2y1T0z0J2r2M1@1N1P0=1~2/2;0J0u2^1@0C2U1F2Z2#35122g1h2`2n2~0D160L1@0v1+2U0I0`030F0F0R2 0c1:2}0u0%0p3w0 0q0p1x0v363910382x3b1 3d3f3h3j0c3l013n3p3r3t2=3w0%2k040q0$3C3E2h3G2Z2.013L0v3g1F3i0G3k3m3o3q0*3V2~3X0l3z0l3%2Y3F113+3J0`3.3:053=3@3R3_3U2:3W3x0A3z0A421y443H3a1R3K0u3e3/3N3?3P3^3T3{4h3}3x0O3z0O4n3545393,494x4d3S3`3s4D3v3x0d3z0d4J4p464s484u3M3;3O3Q4R4g3u3X0m3z0m4!3)4L3I4%3-4)4w4+4y4-4f4C4:3x0Z3z0Z4^2!4`4r2{4}4v4a4c4z4e4B4T550%0r3z0r5a3*4M475f4*4b4,4A4S3|4V3w0Y0 0p0Y5s1I331x2^2(0s2b2-5v4S2@1O1F320c343F433)054S5Z2x0z0s0`3o2Z3X0p3N5+5-5l5C5:2l2C0c5@5B4U5`2#3D4q4N0 0z0F0G0-0|5#2!0q645v0u0 0x6c3!6f4|0N0z0 5I4o4_6k645?015.393X3Z5y6w535m4i3Y5{2t5~4/6G6B0t634$5e0K0 0j1,1{6k6e6Q3c0 2g0h1w6s2!6m5e0~040!6u6Z3K66686a0z6:5u4|6-0S6/6)5)5d2n0n3Z021t0u0i0H0V2t760b780H6`4{6,0 0S6X6+2n6h040W6j706Y6{5e740 7d7f0o6^7z797h721 6-0(6k11706v5,6x0F5/3x3 4+6D5^607S6I2D6K546G7T3%0q7*7u7i6!0467692O6_7t7n1 7p0w7s357,7G0`6o5G7K7F0q7V7R0%4k7U7O6E5_4j7Z5}7P5 5n893%7L373+866z4F5=8b7W5n4G0q5|7#6F4E0%4G627165044S7m6;0`7p7|3F7~8G6$6(8n7v2n6-6 8T7-6=7/6@7=845v6}8X5!8K017x047D0H0T0u0b0J290h8?0*8;8(6|7k837M8o8t874X8a8z8d0%4X8x6J8h6L8B978l848p2h4;8s997X0%4=9d7!9f7$8B4=8E7^480 1U1W1v8$6b7@8-8M8J8U7H0 0!7l708m8,4M9l0J3X57989v8A5D579t8g8c9q9Y428-6S040I4u9L8Z9B042r290c0c9?7 010u0j660J9~8G9D1u8S9T9@017I928Y1h9V3X5p9Z9*5n5p9(9pam1@6O3!7+9A019/0z0Ia55v0J0 9`2U9}939M0`8W8 7w7577798?8^8`8|0c8~aHab6}aA4|8M8N3)8PaB0 8IaW9 ad9R9k958q5E9o9!9a5H8fap6Ga`8E7+b0a(4|aC04a79F7;9Haf3,7p0EaL7.0v0C0C2r0sbe9N040Ubl9^aE9|bpac0 0Qae5!0t5(5K5Y5M5V1x0i5PbF2+2$0v1`bC0t5N1D8F5v2U0N0F0I0v0K0c687T1p1r1t1v0q7J7M1K3G1E0e3i0P8@0=1|5%3r3,a71Y1!1$1+1;231=2vaIaw6T6VaG37bz3r3!0s2h0:0?0q2U0R0G0c0Dck1|0s0b2d2R0s007B7=0q2L0b2T6a0q0v0b0^0z0q0k9{ci1q0C0?0R0#1|2g0D0q8^6e4Sb{2h1Wb}1#0hc0221;1?bR4|9/9;0D6ucb0*3!0v0R3q1l1Y0J0#0q2R0L002:0n290b2W0z1*b_2R5vb|1Zc$c(1/c*c4ab9/0P2UbXc;5(0q1tcH2:0icm2J1l0i0qchb=d61{b*1I3G2^cY1V1Xde1$1(1*21dh24dj9 2A2r2t0 0X1%1)a47M5X713(6*bA945@5/0$3yak8u3Wd:5;aoa^60d^2l515A9g3vd}9z9.0 c/aZ5eb4brc98Oava1a3e87.8Rbta.4Ka:d.6zd:6B3i7V8id@6Hd`alev2k5z5keu3}eqar3Db0avaxaz9Ic5ea8_aFek9Obt8/8;7b2DaVba8)91eMaba#eh1 eUaO0Hcw0|eYaaa-0 b+ema,85a;9md:7(es8teDe20%3 exd?eEf3d~4Qeyf77(asb1au8-b4a+7}ee6ie)bqePbse_e!6.eTaN7eaP8@eP8{3re:5$8-aYa/e_ahd:8ke a|f74kf5f13Y88f95j4.9wf28kfeffb26R0 dm0cdofGcabA1K5LbO5V7L0*0,0.0n04.
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
Python Console Session >>> code_pays ( pays , "Haiti" )
"HTI"
>>> langues_parlees ( pays , langues , "Haiti" )
['French', 'Haiti Creole']
.128013ue6LRSjytwô37sH1 9d/OVoaE=gixà4vpr._h;fïnkl,qùm5b)c]C(NP08[é2-î:050t0c0j0y0C0R0o0r0Z0R0y0o0o0A010j0C0H010406050o0b0V0V0y0I0i040g0x0R0b140x0P0r020y0V0H0M0r0f0c1e0I0T0b0c0o050u1b1d1f1h190H04051M1F1P0u1M190t0C0G0|0~10120~0P0B0b0y0B0c0.0H0i0j0L1o0r0L0C0B0L0R1^0L0j17050@0X0R0c1Y0 11011@1_1{1_0j21231 0j0I1N1:0|1k0o0H0y0P120-01251!010N0_0c0P1s0c1 2n2p2u272x232A0V2C040a0r0(0I0x0H0x0o0C1n1p0=2l0I0I0c0Z2X1F2E0P1N0u1:2-2h2j2i200t2G1#0C0P2z2U1 1V1X0}262`2|0P0x301 0H2$1N2+2-3d1a2o1p322v360I1e0R1 0y1?2$0N12030K0K0Z370c1{350x0.0F0.0q170r0q1F0y3e3h183g2F3j273l3n3p3r0c3t013v3x3z3B2}3E0.2s040r0-3L3N2p3P2+2_013U0y3o1N3q0L3s3u3w3y0=3(363*0m3I0m3:2*3O193@3S123`3|053~403!423%2{3)3F0F3I0F4b1G4d3Q3i1Z3T0x3m3{3W3 3Y413$444q463F0W3I0W4w3d4e3h3^4i4G4m3#433A4M3D3F0d3I0d4S4y4f4B4h4D3V3}3X3Z4!4p3C3*0n3I0n4-3=4U3R4:3_4=4F4@4H4_4o4L4|3F0*3I0*512,534A33564E4j4l4I4n4K4$5e0.0s3I0s5j3?4V4g5o4?4k4^4J4#454(3G0)170q0)5B5l4W575q5I5t5K4%3*0q3H045$5S4z5U5p4Y5s4`5d4r3G3,0q3/0u3M4c525+5E4X594Z5c5v5=0q485(4a5`3;5k5~55605H5a5J4{654t5(4v6a5|6c4/5n6f5r5b5u5L5#4P5(4R6o4x5}6r3k5V5.6v5Z5w0q4*5(4,6C4T6d6s6H615/636x3F0q4~5(506Q4.5D6e6U6g626w5!6Z5g5(5i6(6E6*6T5-6V6J6j4N3G5y5(5A6^2,1Q3b1F302:0t2j2^5E4#2 1W1N3a0c3c3O6p1N4#7m2F0C0t123w2+5#3W7t7v6/6L2t2K0c7B6K651 6o6F270Q170=0N7o6S2v0k3I7S7M4h0N174#0K2o0i1E6D767Y0116040$7X6`3k177(7*3f7-7/0S7o0r7T3T17360V7=545n7/0Y0:7o197+7r1p7A017w3h3*3,5H8h6X6:3+7E2B7H6 5M8m7L7?277V3-0r8D865m2v0o0t17021B0x0j0M8L0b8N8P8M8O1x0P0G0x0C24232l2Z0t02030m0s0M0b1p7_8Q8S8=8O8@0M8c8F0r8o0K7x3F678n7u8i7C5=480r7F8u5;70926a8D8E7-7O040N4D7 814h172z2h0c0c9n7-0x8B2{9v8z9p047_8|5E7/8b8e8d7{4V8~903E7z948p5w4t998t957I706l3:9g9$809i170C7R8e9(9B3_9q0P9s9u8e9o7.170+9F550o3,8_0%2B8_9}88170!9A872v0x170A0Aa98G820484a52v9H8{9^3@9N8k4O9Q9b64704P9V2Lav6Y0.6z9#9%aG9_9j2$0j0b0I0Pag4W9;9?al277/9|ap9/9 8K8U0M0#0x8/2h0ia%0=a4aXaaaUa7ao9L7s9R8 as0.6N93aB8q4*az7G9X8v3*a}6a9K7naqa_9O6#a~b49c5M4~b2a 5wbe9f9gaI170I0^0o9@3d9.a:4h2M0w3{1C0z2#9ma/ah127/7;bH3^aZ048_0e2484998*8,0M0y0H2obs0/0j0r2o0{0t2p0{0~0r1{0o0j0ca.a@bI9`040Ya?ba9Mbca{6=bf9S5=5gbkbgaw5Mc2b88|ar2p3*72c396705yc7c4ck7K3Mb93=5+ce0P5#5O4@8~9Y5M5Q8saAc8aCcC2-5{9)047QaT128B80bM5 7!041$1(1D7%1f231DcNb`bLb^aQ9D0y7)c$7}aP5 17cV1C7`b~byb`7~9-9_0P830x85cR55899I6RbMcu5#5%cicAdacDb3cncBdb8yc`cPbpd35n8Ia!8R8^a#8_8W8Y8!b/3qb:b=0r0=0{84b*1Ddz1%c@b(cZ0,dIb+0Pb-247_8}0P1V1B0,dM0I0r0o1=848_d*a#b}csbb7B9O5^aucF8qd=cmcjcB8x3M9$c~7#3zc:55ac04afc}7-c 047$9Edoam17c(c_b_eaedc)9G17c|bwe0ajd1c.17b|9Jcdc0cf6Z923qczb5eBdfbl659ecqeyd:a{0q9!eDa_dd6Z9U9ad@6L9!bo9h9/ea2$1b0R0@0je35ne5e7eq7|9{a8exd8ezcv6ZaEeReI700qayeWdh6ycp8Ce#c`9j9l0Ie-7@049r2$bv3Obxb_9x9*aOe8e$c=2pcWc^d.9/ane^c)d96Za}e~eX65b1f3d{5#b7d~aGfk3^9j9+fdaifg9teu04aWem9~a0a#a%a)1ga,b?d,eea;04e@e;9/e/e:fjer4#fVd64ye_eNeA3GbefDf46ZbjfHeTg0f6fM9%ere(0be*0ye,f,12e50Jc$eabY0H2z0tfVehfvc`eafTfigub_aVc$bObQfs1)1+b@ei3^7/0!ewd7fze`5#c2g2fI6;eHfEf0cbeLf}95d;chgTg70qclg6eF71g9bpcKaKaMfof:gvbr1Dgee+d-760u7q777l797i1F0j7ch72?2.0y22h40u7a1L8f3^2$0V0K0N0y0Q0c0K0L671x1z1BdIf{cs1S3P1Ma%9=bs0Chl9r0r0Eb/000c0D1y0H8$2Z0p0y0O14b(0I0,0Z0,0=9=0S0r1=gp1m8}0Z0C0r1m0_0Cbud#8/240Xa(0}24054#3^c?1*1,1.1?1|2b1}2D9/fabG3fh13z3-0ob,0r0ydxd#2$3yaM0{hL0R002{b;0I0b2(0C1=i03zi2gFi41-0ii72a1|1~hj5E9j0X2$hp7Sig0=040J0r0z1p3Y0N0?h)8$iDiWg?aN1F7q0r0ha(240Z240I0l23glhBhi0v1p3q2ZhR0b0{0yi=1mdZb.2b2|80i15Ei31+iIiK1`iMibf9brbtgy2,fN5 bAbC0cbE2Rfcgic%gCf!ds0MbR99d1bU8+8-go1f0yb$dMb*ikjbh@b=gIgzgKeviUi:0y2x2Y240B0,2$d#230{0Z0 h*0Ub/bSjJb)0odZ2zil0I1(2L9=99i@4De(2TdWhKiliz8/dM7)iYj00r1Db%dQj:i@j=2Z2x1(2$d$h:iu1=3qi$2%aLja3q0j8N3{2WdZ0t0bd!iq0I0{0$2Zb.h|izi*jf55jhi5iJ29jl2cjnb_idjAif7q0Yd$ikim8Zio2z8Y0ikHi_0,e)e+i}1T790?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
?
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": ""
.
.128013uev6pr_Shf;InDklyqt-wm375bsc]1C 9d/ToNa+P08[=2Fgi4:050I0c0t0N0X0q0B0G0C0q0N0B0B0T010t0X0f010406050B0b0w0w0N0g0r040i0L0q0b0@0L0n050J0~1012140|0f04051k1d1n0J1k0|0I0X0d0,0.0:0=0.0n0W0b0N0W0c0u0f0r0t0j1b0G0j0X0W0j0q1P0j0t0`050%0A0q0c1w0/0;011O1Q1S1Q0t1Y1!1W0t0g1l1K0,170B0f0N0n0=0U011$1y010k0)0c0n0N0w0c1W1{1}221(251!282a0`0a0G0P0g0L0f0L0B0X1a0n0G0#1_0g0g0c0C2v1d2d0n1l0J1K2I1=1@1?1X0I2f1z0X0n272s1W1t1v0-1%2S2U0n0L2Y1W0f2B1l2G2I2/0}1|2w2!232(0g110q1W0N1N2B0k0=030h0h0C2)0c1S2%0L0u0z0u0E0`0G0E1d0N2:2?0{2=2e2^1(2`2|2~300c32013436383a2V3d0u20040G0U3k3m1}3o2G2R013t0N2}1l2 0j313335370#3D2(3F0x3h0x3L2F3n0|3P3r0=3S3U053W3Y3z3!3C2T3E3e0Y3h0Y3-1e3/3p2@1x3s0L2{3T3v3X3x3Z3B3$3 3(3e0z3h0z452/3:2?3Q3@4f3{3A3#394l3c3e0e3h0e4r473;4a3?4c3u3V3w3y4z3~3b3F0y3h0y4I3N4t3q4L3R4N4e4P4g4R3}4k4U3e0R3h0R4Z2H4#492#4(4d3^3`4h3|4j4B4:0u0H3h0H4^3O4u3=4}4O3_4Q4i4A3%4D3f0Q0`0E0Q5a4`4v4)4 5h525j4C3F0E3g045B5r485t4~4x514S4/403f3H0E3K0J3l3.4!5G5d4w4+4y4.545N0E3*5D3,5S3M4_5W4%5Y5g4,5i4T5%425D445,5U2H1o2-1d2Y2L0I1@2Q5d4A2X1u1l2,0c2.3n5~1l4A6f2e0X0I0=352G5A3v6m6o535k6r0G2j0c6u5y555C3-4K4|0p0`0k4c6h0G5/4|0n0`271=0c0c6M6O230L0v0`2T6W6G2_0`1|0r0B6h6X1(0_040Z6h0|463N5G6t016p2?3F3H5g6|5#6w3e206y296A6}6v5z761W5,0G7h6N6(3s0`0C0N0f2u3T6V6_2H7j5c4%0L0`0T6%7w6P6R0n6T7s2;7k0=6;0S6.7J010B3H020s0b0L0t0l0F7o7q0q7S7U7W7N7C236;0D6@7)6l6n7b6q3e5)727;747d0u3*782a6B5^4m7}7f3l7i7v4$6H6#0k7B896)047n7p0%1!8d4{6Y7z7A7t3I6/0=7y040u7/8m1(0w0X5o8x3Q6;6?8q6^7I4u730h7?0u5`7_815M83427 7a7{558P7g877i8s3R7E7G8D5d7L8+4%7Q0`7$7V7X7Z8j0M798=7(8q8%7,8l3Q8u8p2/888y0=8:048|0l9b7.8~3P8L8N4o4P8L6C5N4o8V8R5$839j3L878%6I04390B7H6g7O8F9e8J7:6u8N4F9k7`7c554F9p7b9m839K9u8#7h8%6Q040k0(0t915d939(4%0p0C0`0V3T9A9F9C8K9M8N4W9L9q750u4W9Q8X5N9{9V9W9Y6#9+4|9*8q963Q8A0`5q8H8D9h6 4;6s9M9S5l4=a19N5N4=2I869Wad5d9x0v1O8kac8%6Z0`2(9%aF7O9Z9#2u8.4|9Eai9f9^9Ial56an9}7|57asap3F57aw3Iay9vaM0`0d0)aE95aG7za98fa;0q1!6-aU8e6:0`7Mb0978(040XaQ7+0`7-aT9G2wak1}5A5n9|9R825l5p216za!6Dbka5a-az9,8ba`7l04a|a?9@b17Kb3ba1(999b0m0o9db58EbcbA8t8obTb78h7!9B6`9D0`8G4saj9_aX5BaZbm8Sbo3ga%bn5A6E8!bw8#a79y7F2Bb!5 b$04b4bf3QbL7T8?7Y8i3T8`2abPc68,bSaL7*1(aba@a/bCa=c16kb68-bQ5dc87%0lce0ccgbFcucjb)bQbh0n5A712 9lb@3e5Qbq79bs5%71b`b{8$cpaOaKcoclbU04943nbx6H9.040K0g0bcs8IcE0GcJ5A7^cNaocP3f7~brb/9rbo7^cXa-9w6R0*cs8 b%9?b#aV7=b,8Pc~cU830E8Ud3a2do8ZaxcYcZc(b7b9ckbG018u0Oc+3Nc-23af5Ddg5 0J6j606e626b1d0t65dU2O2J0N1ZdR0J636^0#0%0)0B04.
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)