Chapitre 5.3 - Trier des données⚓︎
Nous reprenons notre fichier de joueurs de rugby du Top14. : top14.csv
import csv
f = open('top14.csv', "r", encoding = 'utf-8')
donnees = csv.DictReader(f)
joueurs = []
for ligne in donnees:
joueurs.append(dict(ligne))
f.close()
1. Créer une fonction filtre⚓︎
Exercice 1
Créer une fonction joueursEquipe
qui renvoie une liste contenant les fiches de tous les joueurs de l'Ă©quipe equipe
passée en paramètre.
Exemple d'utilisation :
>>> joueursEquipe('Bordeaux')
[{'Equipe': 'Bordeaux', 'Nom': 'Jefferson POIROT', 'Poste': 'Pilier', 'Date de naissance': '01/11/1992', 'Taille': '181', 'Poids': '117'}, {'Equipe': 'Bordeaux', 'Nom': 'Lasha TABIDZE', 'Poste': 'Pilier', 'Date de naissance': '04/07/1997', 'Taille': '185', 'Poids': '117'}, {'Equipe': 'Bordeaux', 'Nom': 'Laurent DEL.....
Exercice 2
Définir de la même manière une fonction joueursPoste
qui prend une chaîne de caractères poste
et qui renvoie la liste des fiches des joueurs jouant Ă ce poste.
Exemple d'utilisation :
2. Utilisation d'une fonction de tri⚓︎
2.1 Le problème⚓︎
Comment classer les joueurs suivant leur taille ?
La fonction sorted(liste)
est efficace sur les listes : elle renvoie une nouvelle liste triée dans l'ordre croissant.
Mais comment trier un dictionnaire ?
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-14-de081d14a3da> in <module>
----> 1 test = sorted(joueurs)
TypeError: '<' not supported between instances of 'dict' and 'dict'
Il est normal que cette tentative échoue : un dictionnaire possède plusieurs clés différentes. Ici, plusieurs clés peuvent être des critères de tri : la taille, le poids.
Nous allons donc utiliser la même stratégie que celle utilisée pour le problème du sac à dos.
2.2 Un exemple de tri de dictionnaire⚓︎
Simpsons = [{"Prenom" : "Bart", "age estimé": "10"},
{"Prenom" : "Lisa", "age estimé": "8"},
{"Prenom" : "Maggie", "age estimé": "1"},
{"Prenom" : "Homer", "age estimé": "38"},
{"Prenom" : "Marge", "age estimé": "37"}]
def age(personnage):
return int(personnage["age estimé"])
La création de cette fonction age
va nous permettre de spécifier une clé de tri, par le paramètre key
:
>>> triSimpsons
[{'Prenom': 'Maggie', 'age estimé': '1'},
{'Prenom': 'Lisa', 'age estimé': '8'},
{'Prenom': 'Bart', 'age estimé': '10'},
{'Prenom': 'Marge', 'age estimé': '37'},
{'Prenom': 'Homer', 'age estimé': '38'}]
On peut aussi inverser l'ordre de tri :
>>> triSimpsons = sorted(Simpsons, key=age, reverse=True)
>>> triSimpsons
[{'Prenom': 'Homer', 'age estimé': '38'},
{'Prenom': 'Marge', 'age estimé': '37'},
{'Prenom': 'Bart', 'age estimé': '10'},
{'Prenom': 'Lisa', 'age estimé': '8'},
{'Prenom': 'Maggie', 'age estimé': '1'}]
Exercice 3
Trier les joueurs du Top14 par taille.
Exercice 4
Trier les joueurs du Top14 par poids.
Correction
```python def poidsPlayer(player) : return int(player['Poids'])
joueurs_poids_croissant = sorted(joueurs, key=poidsPlayer)
Exercice 5
Trier les joueurs de Bordeaux suivant leur Indice de Masse Corporelle (IMC )
3. Recherche des joueurs de profil physique similaire⚓︎
3.1 Distance entre deux joueurs⚓︎
Exercice 6
Construire une fonction distance
qui renvoie la somme des carrés des différences de tailles et de poids entre deux joueurs joueur1
et joueur2
, passés en paramètres.
Cette fonction nous permettra d'estimer la différence morphologique entre deux joueurs.
Exemple d'utilisation :
VĂ©rification :
>>> joueurs[23]
{'Equipe': 'Agen', 'Nom': 'Alban CONDUCHÉ', 'Poste': 'Centre', 'Date de naissance': '29/10/1996', 'Taille': '190', 'Poids': '102'}
>>> joueurs[31]
{'Equipe': 'Agen', 'Nom': 'JJ TAULAGI', 'Poste': 'Arrière', 'Date de naissance': '18/06/1993', 'Taille': '180', 'Poids': '90'}
\((102-90)^2+(190-180)^2=244\)
3.2 Distance des joueurs avec Baptiste Serin⚓︎
Retrouvons d'abord le numéro de Baptiste Serin dans notre classement de joueurs :
>>> joueurs[530]
{'Equipe': 'Toulon',
'Nom': 'Baptiste SERIN',
'Poste': 'Mêlée',
'Date de naissance': '20/06/1994',
'Taille': '180',
'Poids': '79'}
Baptiste SERIN est donc le joueur numéro 530.
Exercice 7
Créer une fonction distanceSerin
qui prend en paramètre un joueur et qui renvoie sa différence avec Baptiste Serin.
Exemple d'utilisation :
Exercice 8
Classer l'ensemble des joueurs du Top14 suivant leur différence morphologique avec Baptiste Serin (du plus proche au plus éloigné). Afficher le nom des 10 premiers joueurs.
??? success \"Correction\"