2.4 - Python Dictionnaires

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 25

4 - Dictionnaires

Python pour sciences économiques

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.

Question: quels sont les risques liés à votre implémentation?

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.

Question: quels sont les avantages et inconvénients comparé à l'implémentation


précédente?

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 etudiants = [[213, "jean", "neuchâtel"], [435,"paul","genève"],


2 [324,"marie", "lausanne"]]
3
4 for etudiant in etudiants:
5 if etudiant[0]==324:
6 print(etudiant[2])
7
8
5
Les dictionnaires - mécanisme
Un dictionnaire est un ensemble de paires clé:valeur entre accolade. La
valeur est accessible en indiquant la clé entre crochet et un élément peut être
ajouté de la même manière. La liste des clés est accessible par la
méthode keys(), et la liste des valeurs par la méthode values().

1 #créer un dico, avec num d'étudiant·e en clé et nom en valeur


2 dict={123:"Jon", 324:"Marie", 4536: "Paula"}
3 #imprimer une valeur particulière
4 print(dict[324])
5 #assigner une nouvelle valeur à une clé
6 dict[4536]="Paul"
7 #ajouter un élément
8 dict[234]="Olivia"
9 print(dict)
6
Les dictionnaires - enlever un élément
On peut enlever un élément en utilisant la notation del dico["clé"] ou
utiliser dico.pop(clé [,valeur par défaut]). Attention, si l'on tente de
retirer un élément qui n'est pas dans le dictionnaire avec del, une erreur se
produit. De même si on ne donne pas de valeur par défaut avec pop().

1 dico={123:"Jon", 324:"Marie", 4536: "Paula"}


2
3 if 1113 in dico:
4 del dico[123]
5 deletedItem = dico.pop(324, None)
6 print(dico)
7
8
9
7
Les dictionnaires - itération
Il est possible d’itérer sur les clés avec l’opérateur for key in dict. Pour
itérer sur les éléments, il faut utiliser in dict.items(). Un item est un tuple
clé: valeur.

1 dictionnaire = {123: "john", "clé": "une_valeur"}


2 for clef in dictionnaire:
3 print(clef)
4
5 for paire in dictionnaire.items():
6 print(paire)
7
8 for clef, valeur in dictionnaire.items():
9 print(paire)
8
Structures de données
Des structures de données plus complexes peuvent être construites avec des
dictionnaires pour représenter des objets. Par exemple, on peut utiliser un
dictionnaire pour representer une valeur boursière.

1 nasdaq = {"AAPL":{"nom":"Apple", "prix":


2 [253.12,256,257,256,256.2], "domicile":{"ville":"Cupertino",
3 "pays": "USA"}},"AMZN":{"nom":"Amazon", "prix":[117,116,114,118]},
4 "TSLA":{"nom":"Tesla", "prix":[443,440,420]}}
5
6 print(max(nasdaq["AAPL"]["prix"]))
7
8
9
9
Structures de données
Des structures de données plus complexes peuvent être construites avec des
dictionnaires pour représenter des objets. Par exemple, on peut utiliser un
dictionnaire pour representer une valeur boursière.

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.

Question: quels sont les avantages et inconvénients comparé à l'implémentation


précédente?

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.

1 etudiant = {213:{"nom":"jean", "domicile":"neuchâtel"},


2 324:{"nom":"marie", "domicile":"lausanne"},
3 435:{"nom":"paul", "domicile":"genève"}}
4
5 print(etudiant[324]["domicile"])

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"])

1 cours = {"IMI2011":{"nom":"Math", "salle": "C47", "nombre


2 étudiants":56, "etudiants": ["marc", "julie", "jean"]},"IMI2011":
3 {"nom":"Stat", "salle": "C45", "nombre étudiants":55, "etudiants":
4 ["marc", "julie", "marie"]},"IMI2012":{"nom":"Eco", "salle": 110,
5 "nombre étudiants":50, "etudiants": ["julie"]}}
6
7 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.

cours = {"IMI2011":{"nom":"Math", "salle": "C47", "nombre étudiants":56, "etudiants": {12:


{"nom":"marc", "domicile":"Lausanne"}, 123:{"nom":"julie", "domicile": "Bienne"}}},"IMI2011":
{"nom":"Stat", "salle": "C45", "nombre étudiants":55, "etudiants": {12:{"nom":"marc",
"domicile":"Lausanne"}, 123:{"nom":"julie", "domicile": "Bienne"}, 145:{"nom":"marie"}}},"IMI2012":
{"nom":"Eco", "salle": 110, "nombre étudiants":50, "etudiants": {12:{"nom":"marc",
"domicile":"Lausanne"}, 123:{"nom":"julie", "domicile": "Bienne"}}}}
print(cours["IMI2011"]["etudiants"][123]["domicile"])

#votre ligne de code

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....

cours = {"IMI2011":{"nom":"Math", "salle": "C47", "nombre étudiants":56, "etudiants": {12:


{"nom":"marc", "domicile":"Lausanne"}, 123:{"nom":"julie", "domicile": "Bienne"}}},"IMI2011":
{"nom":"Stat", "salle": "C45", "nombre étudiants":55, "etudiants": {12:{"nom":"marc",
"domicile":"Lausanne"}, 123:{"nom":"julie", "domicile": "Bienne"}, 145:{"nom":"marie"}}},"IMI2012":
{"nom":"Eco", "salle": 110, "nombre étudiants":50, "etudiants": {12:{"nom":"marc",
"domicile":"Lausanne"}, 123:{"nom":"julie", "domicile": "Bienne", "notes":[4,5,6,3,5,4]}}}}

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?

Vous aimerez peut-être aussi