Recherche de donnée simple
On expose dans cette page les principes généraux d’une telle recherche.
Pour illustrer ces principes, on se référera à 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 |
Cette table correspond au tableau de dictionnaires suivant :
| 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}]
|
Rechercher si une valeur est présente
Principe
- On parcourt l'ensemble des lignes de la table de données.
- Pour chaque ligne, on identifie la valeur correspondant à l'attribut choisi.
- Ou bien cette valeur est celle recherchée et on renvoie
True
,
- Ou bien ce n'est pas le cas et on examine la ligne suivante.
- Si on ne trouve pas non plus à la dernière ligne, on renvoie
False
Exemple
Copiez, collez et complétez la définition de la fonction est_presente()
qui
renvoie True
si, dans la table
, une des valeurs de l'attribut attribut
est valeur
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | def est_presente(table, attribut, valeur):
"""
table - list, Table de données représentée par un tableau de dictionnaires ayant les mêmes clés
attribut - str, chaîne de caractères représentant une des clés
valeur - doit être du même type que les valeurs de la clé attribut
Sortie: booléen - True si valeur est présente dans la ligne pour l'attribut sélectionné, False sinon
"""
for dico in table:
if ..... :
return .....
return .....
##----- Programme principal et Tests -----##
if __name__ == '__main__':
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}]
|
Tests dans la console
Vérifiez que vous obtenez les résultats suivants lors de l'appel dans la
console :
>>> est_presente(personnes, 'annee_nais', 1985)
True
>>> est_presente(personnes, 'annee_nais', 1977)
False
Une solution
| def est_presente(table, attribut, valeur):
"""
table - list, Table de données représentée par un tableau de dictionnaires ayant les mêmes clés
attribut - str, chaîne de caractères représentant une des clés
valeur - doit être du même type que les valeurs de la clé attribut
Sortie: booléen - True si valeur est présente dans la ligne pour l'attribut sélectionné, False sinon
"""
for dico in table:
if dico[attribut] == valeur:
return True
return False
|
Remarque importante
La fonction est_presente()
est déjà définie dans le module
fonctions_csv.py
.
Par conséquent, il n'est pas nécessaire de la copier/coller d'un programme
à l'autre : il suffira d'importer le module fonctions_csv
pour pouvoir
utiliser cette fonction.
Récupérer une donnée simple
Principe
- On parcourt l'ensemble des lignes de la table de données.
- Pour chaque ligne, on identifie la valeur correspondant à l'attribut choisi.
- Si cette valeur est celle recherchée, on renvoie la valeur d'un autre
attribut de cette ligne,
- ou bien ce n'est pas le cas et on examine la ligne suivante.
- Si on ne trouve pas non plus à la dernière ligne, on renvoie
None
Exemple
Copiez, collez et complétez la définition de la fonction recupere_valeur()
qui renvoie la valeur de attribut2
présent dans une ligne de table
si,
dans cette ligne, la valeur de l'attribut attribut1
est valeur1
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | def recupere_valeur(table, attribut1, valeur1, attribut2):
"""
table - list, Table de données représentée par un tableau de dictionnaires ayant les mêmes clés
attribut1, attribut2 - str, chaînes de caractères représentant une des clés
valeur1 - doit être du même type que les valeurs de la clé attribut1
Sortie: la valeur de la clé attribut2 de cette ligne,
None si attribut1 ne prend jamais la valeur valeur1
"""
for dico in table:
if ..... :
return .....
return .....
##----- Programme principal et Tests -----##
if __name__ == '__main__':
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}]
|
Tests dans la console
Vérifiez que vous obtenez les résultats suivants lors de l'appel dans la
console :
>>> recupere_valeur(personnes, 'annee_nais', 1985, 'nom')
'Gemlamorte'
>>> recupere_valeur(personnes, 'genre', 'M', 'annee_nais')
2000
Une solution
1
2
3
4
5
6
7
8
9
10
11
12 | def recupere_valeur(table, attribut1, valeur1, attribut2):
"""
table - list, Table de données représentée par un tableau de dictionnaires ayant les mêmes clés
attribut1, attribut2 - str, chaînes de caractères représentant une des clés
valeur1 - doit être du même type que les valeurs de la clé attribut1
Sortie: la valeur de la clé attribut2 de cette ligne,
None si attribut1 ne prend jamais la valeur valeur1
"""
for dico in table:
if dico[attribut1] == valeur1 :
return dico[attribut2]
return None
|
Remarques importantes
- On peut constater que cette fonction n'est pas forcément performante.
En effet, dans le second appel, elle ne renvoie que la valeur recherchée
pour la première ligne rencontrée. Nous améliorerons ce comportement
au fur et à mesure du chapitre.
- La fonction
recupere_valeur()
est déjà définie dans le module
fonctions_csv.py
.
Par conséquent, il n'est pas nécessaire de la copier/coller d'un programme
à l'autre : il suffira d'importer le module fonctions_csv
pour pouvoir
utiliser cette fonction.
Comptage d'occurences
Principe
- On initialise un compteur à zéro.
- On parcourt l'ensemble des lignes de la table de données.
- Pour chaque ligne, on identifie la valeur correspondant à l'attribut choisi.
- Si cette valeur est celle recherchée, on incrémente le compteur de 1
- Enfin, on renvoie la valeur de ce compteur.
Exemple
Copiez, collez et complétez la définition de la fonction compte_valeur()
qui
renvoie le nombre d'occurences de attribut
dont la valeur est valeur
dans
la table
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | def compte_valeur(table, attribut, valeur):
"""
table - list, Table de données représentée par un tableau de dictionnaires ayant les mêmes clés
attribut - str, chaînes de caractères représentant une des clés
valeur - doit être du même type que les valeurs de la clé attribut
Sortie : le nombre d'occurences de valeur pour la clé attribut
"""
.....
for dico in table:
if ..... :
.....
return .....
##----- Programme principal et Tests -----##
if __name__ == '__main__':
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}]
|
Tests dans la console
Vérifiez que vous obtenez les résultats suivants lors de l'appel dans la
console :
>>> compte_valeur(personnes, 'annee_nais', 1985)
1
>>> compte_valeur(personnes, 'genre', 'M')
4
Une solution
1
2
3
4
5
6
7
8
9
10
11
12 | def compte_valeur(table, attribut, valeur):
"""
table - list, Table de données représentée par un tableau de dictionnaires ayant les mêmes clés
attribut - str, chaînes de caractères représentant une des clés
valeur - doit être du même type que les valeurs de la clé attribut
Sortie : le nombre d'occurences de valeur pour la clé attribut
"""
compteur = 0
for dico in table:
if dico[attribut] == valeur :
compteur += 1
return compteur
|
Remarque importante
La fonction compte_valeur()
est, elle aussi, déjà définie dans le module
fonctions_csv.py
.
Par conséquent, il n'est pas nécessaire de la copier/coller d'un programme
à l'autre : il suffira d'importer le module fonctions_csv
pour pouvoir
utiliser cette fonction.