2.4 - Python Dictionnaires
2.4 - Python Dictionnaires
2.4 - Python Dictionnaires
Adrian Holzer
1
Problème 1a
Utilisez des listes pour représenter des étudiants. Pour chaque étudiant, on
connaît le nom, le domicile et le numéro d’immatriculation. Par exemple, on a
Jean, numéro 213 qui habite à Neuchâtel, Marie, numéro 324 qui habite à
Lausanne, et Paul, numéro 435 qui habite à Genève. Une fois cette structure
faites, écrivez du code pour imprimer le domicile de l’étudiant.
2
Problème 1a Corrigé
Risques: Inconsistence en ajoutant de nouveaux étudiants. Difficulté à ajouter
des nouveaux champs (on doit ajouter une liste) surtout s'il sont optionnels.
Besoin de garder les champs dans le même ordre. Si la liste est longue, il faut
parcourir beaucoup d’éléments pour arriver à l'étudiant.
1 numero_etudiant = [213,435,324]
2 nom_etudiant = ["jean", "paul", "marie" ]
3 domicile_etudiant = ["neuchâtel", "genève", "lausanne" ]
4
5 for i,e in enumerate(numero_etudiant):
6 if e == 324:
7 print(domicile_etudiant[i])
8
3
Problème 1b
On peut aussi utiliser une seule liste qui contient une liste par étudiant. Refaites le
même exercice en utilisant cette liste de listes.
4
Problème 1b Corrigé
Avantages: les étudiants sont groupés, facile d'en ajouter. Plus facile d'ajouter
des champs même optionnels.
Inconvénient: il faut connaître l'indice de chaque élément à l'intérieur de la liste.
Pas d'avantage au niveau du nombre d'éléments.
1 nasdaq = {"AAPL":{"nom":"Apple",
2 "prix":[253.12,256,257,256,256.2],
3 "domicile":{"ville":"Cupertino",
4 "pays": "USA"}},
5 "AMZN":{"nom":"Amazon",
6 "prix":[117,116,114,118]},
7 "TSLA":{"nom":"Tesla",
8 "prix":[443,440,420]}}
9 print(max(nasdaq["AAPL"]["prix"]))
10
Problème 1c
Utilisez des dictionnaires pour représenter des étudiants. Pour chaque étudiant
on connait le nom, le domicile et le numéro d’immatriculation. Par exemple, on a
Jean, numéro 213 qui habite à Neuchâtel, Marie, numéro 324 qui habite à
Lausanne, et Paul, numéro 435 qui habite à Genève. Une fois cette structure
faites, écrivez du code pour imprimer le domicile de l’étudiant 324.
11
Problème 1c Corrigé
Avantages: On peut ajouter des éléments, même optionnels. On utilise des noms
pour les éléments, donc pas besoin de se rappeler de l'index. On accède
directement aux éléments par la clé. Pas besoin de faire des itérations.
12
TP Dictionnaires
13
Exercice 1
Vous avez une structure de donnée en dictionnaire qui représente des cours.
Chaque cours est identifié par un numéro. Un cours est lui aussi un dictionnaire
qui contient son nom, le numéro de la salle, le nombre d'étudiants ainsi qu'un liste
d'étudiants.
cours = {"IMI2011":{"nom":"Math", "salle": "C47", "nombre étudiants":56, "etudiants": ["marc",
"julie", "jean"]},"IMI2011":{"nom":"Stat", "salle": "C45", "nombre étudiants":55, "etudiants":
["marc", "julie", "marie"]},"IMI2012":{"nom":"Eco", "salle": 110, "nombre étudiants":50,
"etudiants": ["julie"]}}
#votre ligne de code
Question: Donnez la ligne de code pour trouver le numéro de salle du cours IMI2012
14
Exercice 1 Corrigé
Réponse: print(cours["IMI2012"]["salle"])
15
Exercice 2
Vous avez une structure de donnée en dictionnaire qui représente des cours.
Chaque cours est identifié par un numéro. Un cours est lui aussi un dictionnaire
qui contient son nom, le numéro de la salle, le nombre d'étudiants ainsi qu'un liste
d'étudiants. La liste d’étudiants est aussi un dictionnaire qui contient le numéro
d'étudiant, le nom et le domicile.
Question: Quel code faut-il pour imprimer le domicile de Julie, étudiante numéro 123, du cours de de
statistique numéro IMI2011? 16
Exercice 2 Corrigé
Réponse: print(cours["IMI2011"]["etudiants"][123]["domicile"])
1 cours = {"IMI2011":{"nom":"Math", "salle": "C47", "nombre
2 étudiants":56, "etudiants": {12:{"nom":"marc",
3 "domicile":"Lausanne"}, 123:{"nom":"julie", "domicile":
4 "Bienne"}}},"IMI2011":{"nom":"Stat", "salle": "C45", "nombre
5 étudiants":55, "etudiants": {12:{"nom":"marc",
6 "domicile":"Lausanne"}, 123:{"nom":"julie", "domicile": "Bienne"},
7 145:{"nom":"marie"}}},"IMI2012":{"nom":"Eco", "salle": 110, "nombre
8 étudiants":50, "etudiants": {12:{"nom":"marc",
9 "domicile":"Lausanne"}, 123:{"nom":"julie", "domicile":
10 "Bienne"}}}}
11
12 print(cours["IMI2011"]["etudiants"][123]["domicile"])
17
Exercice 3
Vous avez une structure de donnée en dictionnaire qui représente des cours.
Chaque cours est identifié par un numéro. Un cours est lui aussi un dictionnaire
qui contient son nom, le numéro de la salle, le nombre d'étudiants ainsi qu'un liste
d'étudiants. La liste d’étudiants est également un dictionnaire qui contient le
numéro d'étudiant, le nom et le domicile, ainsi que leurs notes....
Question: Quelle est la moyenne de Julie, étudiante 123, dans le cours d'économie IMI2012?
18
Exercice 3 Corrigé
Réponse: 4.16
1 import statistics as s
2
3 cours = {"nom":"Max"....}
4
5 print(s.mean(cours["IMI2012"]["etudiants"][123]["notes"]))
6
7
8
9
10
11
12
19
Exercice 4
Créez un programme qui imprime le mot le plus fréquent dans le texte ci dessous:
comment les technologies de l' information et de la communication et leurs utilisations ont évolué entre hier et d’aujourd’hui? alice est au travail quand elle est
interrompue par une notification sur son téléphone portable. c’est un tweet du président des etats-unis envoyé à l' instant à ses 50 millions de followers. si l' envie
lui en prend, alice peut lui répondre en laissant un commentaire qui pourra être lu par le monde entier. cette simple possibilité est emblématique des nouveaux
moyens de communication en ce début du 21ème siècle. ceux-ci ont les caractéristiques suivantes: les messages peuvent être stockés. cela facilite l' accès à l'
information certes, mais pose également des problèmes de confidentialité. les messages peuvent atteindre un large public ciblé. cela amplifie la transmission
d’informations, mais entraîne des risques de propagande). les messages peuvent être transmis instantanément.
cela accélère les échanges, mais contribue à une surcharge d’informations. les messages peuvent être produits par un large public. cela permet d’augmenter l'
inclusion mais soulève des problèmes de liberté d’expression et de censure. les messages peuvent atteindre leur destinataire en tout temps. cela rend l' information
accessible partout mais augmente les risques de cyber harcèlement. mais ces caractéristiques et ces enjeux à la fois sociaux et politiques ne sont pas tout
nouveaux, puisque les moyens de communication actuels s'insèrent dans une longue histoire. depuis l' invention du langage, l' humain est capable de
communiquer des idées plus ou moins sophistiquées. mais la transmission d’informations reste principalement locale. l' information est stockée en mémoire, elle
voyage lentement de bouche à oreille et disparaît avec la dernière personne qui la possède.
l' invention de l' écriture il y a plus de 5000 ans permet de stocker l' information hors de la mémoire. cette technologie est à l' origine utilisée pour faciliter la tenue
des comptes (compter le nombre d’épis de blé) avant d’être utilisée plus largement pour transmettre de l' information comme par lettre par exemple. avant le milieu
du 15ème siècle, tout texte est manuscrit, ce qui implique un coût énorme en temps pour faire des copies et atteindre une audience.
cette limitation est levée avec l' invention de l' imprimerie en 1440. il est dès lors possible de faire des copies d’ouvrage rapidement et d’atteindre un large public.
les journaux à grand tirage font leur apparition et certain “penny papers” élargissent leur audience en utilisant des revenus publicitaires pour réduire leur prix (circa
1830). c’est le début de l' utilisation d’un modèle d’affaire qui considère que l' audience est un produit qui peut être vendu aux annonceurs.
néanmoins la distribution de l'information reste relativement lente jusqu'à l'introduction de technologies électriques pendant le 19ème siècle. cela débute par le
télégraphe, qui permet de transmettre du code morse d’un émetteur à un récepteur instantanément. vers la moitié du 19ème siècle un câble sous marin relie déjà le
continent américain et l' europe. plus tard, les téléphones rendent possible la communication immédiate de la voix sur sur de longues distances.
20
Exercice 4 Corrigé
text="hello world hello world world"
text_list=text.split(" ")
print(text_list)
dictionnaire_mot_compteur={}
for i in text_list:
if i in dictionnaire_mot_compteur:
dictionnaire_mot_compteur[i]=dictionnaire_mot_compteur[i]+1
else:
dictionnaire_mot_compteur[i]=1
word=""
count=0
for i in dictionnaire_mot_compteur:
if dictionnaire_mot_compteur[i]>count:
count=dictionnaire_mot_compteur[i]
word=i
print(word, count)
21
Exercice 5
Vous disposez d'un dictionnaire avec la classe des élèves et leurs notes. Écrivez
un programme qui n'imprime que les noms de ceux qui ont une note supérieure à
la moyenne de la classe.
Question: Combien ont une note supérieure à la moyenne de classe ?
student_and_grade = {"Martina": 5.35, "Bastien": 5.07, "Claire": 3.53,
"Anna": 4.09, "Maria": 4.55, "Kim": 3.98,"Robin": 3.87, "Adriana": 5.20,
"Kristina": 5.33, "Michael": 4.52, "Sophie": 4.54, "Sara": 4.94,"Olof":
4.61, "Tina": 5.74, "Hanna": 4.42, "Mirsa": 5.55, "Sanna": 4.99, "Sally":
4.34,"Urban": 4.11, "Kelly": 5.14, "Helmut": 4.53, "Joanna": 4.69,
"Josephine": 4.00, "Vilma": 5.19, "Martin": 5.35, "Bastiena": 5.07,
"Klaire": 3.53, "Anne": 4.09, "Marie": 4.55, "Kimi": 4.98,"Robina": 3.87,
"Adrian": 5.20, "Kristian": 3.3, "Michaelle": 3.52, "Sophia": 4.54,
"Sarah": 4.94,"Olaf": 4.61, "Tino": 5.74, "Hanne": 4.42, "Mirso": 3.55,
"Sannah": 4.99, "Sallie": 4.34,"Urbi": 4.11, "Kellian": 5.14, "Helm":
4.53, "Joan": 4.69, "Joseph": 4.00, "Vilm": 5.19 }
22
Exercice 5 Corrigé
Réponse: 23
1 import statistics as s
2 student_and_grade = {"Martina": 5.35, ... "Vilm": 5.19}
3 grade_average = s.mean(student_and_grade.values())
4 students_above_avg = []
5 for name, grade in student_and_grade.items():
6 if grade > grade_average:
7 students_above_avg.append(name)
8 print(name)
9 print(len(students_above_avg))
23
Bibliographie
https://docs.python.org/3/tutorial/introduction.html https://www.w3schools.com/python/python_variables.asp
24
Questions?