Vous pouvez créer un nouvel itérateur à partir d’un itérateur existant comme une liste ou un dictionnaire et tout cela grâce à la fonction filter() intégré à Python. 

Un iterable est un objet python qui peut être « itéré ». Cela veut dire qu’il renvoie des éléments dans une séquence utilisable dans une boucle for.

Voici la syntaxe de base de la fonction filter() :

filter(function, iterable)

Cette instruction donne en retour un objet filtre qui est un objet itérable. La fonction tel que list() peut être utilisée pour faire une liste de tous les éléments retournés dans un objet filtre.

Utilisation de none avec filter()

Grâce à none, vous pouvez obtenir toutes les valeurs que Python considère comme fausse. Pour Python, tout ce qui a pour longueur 0 est faux. Par exemple, considérons une liste vide, une chaîne vide ou encore ce qui est numériquement 0.

aquarium = [11, False, 18, 21, "", 12, 34, 0, [], {}]

Cette liste contient des nombres entiers, des séquences vides et une valeur booléenne. Appliquons maintenant la fonction filter() à cette expression :

filtre = filter(None, aquarium)

Après cela, la liste filtre est passée dans la fonction list() afin d’obtenir une liste de nos éléments considérés vrai :

print(list(filtre))
[11, 25, 18, 21, 12, 34]

Utilisation de filter() avec une liste de dictionnaire

Face à une structure de donnée plus complexe, vous avez toujours la possibilité d’utiliser la fonction filter()pour l’évaluation de chaque élément.

À titre d’exemple, avec une liste comportant différents détails sur chaque créature se trouvant dans un aquarium.

creatures = [
  {"nom" : "sammy", "espèce" : "requin", "numéro de réservoir" : "11", "type" : "poisson"},
  {"nom" : "ashley", "espèce" : "crabe", "numéro de réservoir" : "25", "type" : "crustacé"},
  {"nom" : "jo", "espèce" : "guppy", "numéro de réservoir" : "18", "type" : "poisson"},
  {"nom" : "jackie", "espèce" : "homard", "numéro de réservoir" : "21", "type" : "crustacé"},
  {"nom" : "charlie", "espèce" : "poisson-clown", "numéro de réservoir" : "12", "type" : "poisson"},
  {"nom" : "olly", "espèce" : "Tortue verte", "Numéro de réservoir" : "34", "type" : "tortue"}
]

Pour filtrer ces données par une suite de recherche, il faut utiliser une fonction imbriquée, puis accéder à chaque dictionnaire et élément des dictionnaires :

def filtre_set(creatures, recherche):
    def iterateur_func(x):
        for v in x.values():
            if recherche_string in v:
                return True
        return False
    return filter(iterateur_func,creatures)

La fonction filtre_set() a pour argument creatures et recherche_string.  Le iterateur_func() se comporte comme la fonction filter() au sein de la fonction filtre_set().  La fonction filtre_set() renvoie l’itérateur résultant de filter().

L’argument x que prend la fonction iterateur_func() représente un élément de la liste.

Ensuite, avec la boucle for, on accède à chaque valeur dans le dictionnaire. Et enfin, on vérifie si la chaîne recherche_string est en v.

« Back to Glossary Index
Categories:

Juvénal JVC

Juvénal est spécialisé depuis 2011 dans la valorisation à large échelle des données. Son but est d'aider les professionnels de la data à développer les compétences indispensables pour réussir dans le Big Data. Il travaille actuellement comme Lead Data Engineer auprès des grands comptes. Lorsqu'il n'est pas en voyage, Juvénal rédige des livres ou est en train de préparer la sortie d'un de  ses livres. Vous pouvez télécharger un extrait de son dernier livre en date ici : https://www.data-transitionnumerique.com/extrait-ecosystme-hadoop/

>