Sélection de lignes☘
A partir d'une table initiale, on cherche à créer une nouvelle table par extraction des lignes qui satisfont une condition donnée.
Exemple
A partir d'une table de données contenant des informations sur des individus, on souhaite obtenir :
- la table de tous les individus qui sont nés avant 2000 ;
- ou bien la table de tous les individus qui se prénomment "Alain" et qui sont nées après 1990 ;
- etc...
Principe☘
- On initialise une table vide.
- Pour chaque ligne de la table étudiée, on identifie la valeur correspondant à un (ou plusieurs) attribut(s) choisi(s).
- Si cette valeur est celle recherchée, on copie la ligne dans la nouvelle table.
- Enfin, on renvoie le contenu de la nouvelle table.
Sélection par compréhension☘
Puisque les tables sont représentées par un tableau de dictionnaires en Python, une définition par compréhension de tableau permet d'effectuer cette sélection :
1 |
|
Il faut être très attentif au type des valeurs prises par les attributs.
En particulier, bien convertir en entier (ou en flottant) les valeurs des
attributs qui le nécessitent avant d'effectuer ces opérations de sélection...
Rappel
Le module fonctions_csv.py
contient les
fonctions attributs_entiers()
et attributs_flottants()
qui permettent
d'effectuer, par effet de bord ces conversions sur les attributs désignés
de la table.
Exemples☘
On se réfère à nouveau à la table Personnes suivante :
num | nom | prenom | genre | annee_nais |
---|---|---|---|---|
1 | Labrosse | Adam | M | 2000 |
2 | Gemlamorte | Adèle | F | 1985 |
3 | Auboisdormant | Abel | M | 2001 |
4 | Etpan | Ahmed | M | 1975 |
5 | Térieur | Alain | M | 1999 |
-
Ouvrez un éditeur Python puis copiez/collez la table de données suivante :
1 2 3 4 5
personnes = [{'id_personne': 1, 'nom': 'Labrosse', 'prenom': 'Adam', 'genre': 'M', 'annee_nais': 2000}, {'id_personne': 2, 'nom': 'Gemlamorte', 'prenom': 'Adèle', 'genre': 'F', 'annee_nais': 1985}, {'id_personne': 3, 'nom': 'Auboisdormant', 'prenom': 'Abel', 'genre': 'M', 'annee_nais': 2001}, {'id_personne': 4, 'nom': 'Etpan', 'prenom': 'Ahmed', 'genre': 'M', 'annee_nais': 1975}, {'id_personne': 5, 'nom': 'Térieur', 'prenom': 'Alain', 'genre': 'M', 'annee_nais': 1999}]
-
On veut extraire la table de toutes les personnes étant des hommes.
Copiez, collez et complétez en ligne 7 la définition par compréhension du tableauhommes
pour qu'il contienne les données correspondantes.7
hommes = [... for ... in ... if ...]
Tests dans la console
Vérifiez que vous obtenez les résultats suivants lors de l'appel dans la console :
>>> hommes [{'id_personne': 1, 'nom': 'Labrosse', 'prenom': 'Adam', 'genre': 'M', 'annee_nais': 2000}, {'id_personne': 3, 'nom': 'Auboisdormant', 'prenom': 'Abel', 'genre': 'M', 'annee_nais': 2001}, {'id_personne': 4, 'nom': 'Etpan', 'prenom': 'Ahmed', 'genre': 'M', 'annee_nais': 1975}, {'id_personne': 5, 'nom': 'Térieur', 'prenom': 'Alain', 'genre': 'M', 'annee_nais': 1999}]
Une solution
1 2 3 4 5 6 7
personnes = [{'id_personne': 1, 'nom': 'Labrosse', 'prenom': 'Adam', 'genre': 'M', 'annee_nais': 2000}, {'id_personne': 2, 'nom': 'Gemlamorte', 'prenom': 'Adèle', 'genre': 'F', 'annee_nais': 1985}, {'id_personne': 3, 'nom': 'Auboisdormant', 'prenom': 'Abel', 'genre': 'M', 'annee_nais': 2001}, {'id_personne': 4, 'nom': 'Etpan', 'prenom': 'Ahmed', 'genre': 'M', 'annee_nais': 1975}, {'id_personne': 5, 'nom': 'Térieur', 'prenom': 'Alain', 'genre': 'M', 'annee_nais': 1999}] hommes = [dico for dico in personnes if dico['genre']=='M']
-
On veut extraire la table de toutes les personnes dont l'année de naissance est supérieure ou égale à
2000
.
Copiez, collez et complétez en ligne 9 la définition par compréhension du tableaugeneration_Z
pour qu'il contienne les données correspondantes.9
generation_Z = [... for ... in ... if ...]
Tests dans la console
Vérifiez que vous obtenez les résultats suivants lors de l'appel dans la console :
>>> generation_Z [{'id_personne': 1, 'nom': 'Labrosse', 'prenom': 'Adam', 'genre': 'M', 'annee_nais': 2000}, {'id_personne': 3, 'nom': 'Auboisdormant', 'prenom': 'Abel', 'genre': 'M', 'annee_nais': 2001}]
Une solution
1 2 3 4 5 6 7 8 9
personnes = [{'id_personne': 1, 'nom': 'Labrosse', 'prenom': 'Adam', 'genre': 'M', 'annee_nais': 2000}, {'id_personne': 2, 'nom': 'Gemlamorte', 'prenom': 'Adèle', 'genre': 'F', 'annee_nais': 1985}, {'id_personne': 3, 'nom': 'Auboisdormant', 'prenom': 'Abel', 'genre': 'M', 'annee_nais': 2001}, {'id_personne': 4, 'nom': 'Etpan', 'prenom': 'Ahmed', 'genre': 'M', 'annee_nais': 1975}, {'id_personne': 5, 'nom': 'Térieur', 'prenom': 'Alain', 'genre': 'M', 'annee_nais': 1999}] hommes = [dico for dico in personnes if dico['genre']=='M'] generation_Z = [dico for dico in personnes if dico['annee_nais']>=2000]