Module Python Collections : Compteur, ChainMap, Deque et Tuple
Publié: 2020-12-01Le module Python Collections offre un ensemble de types de données de conteneur qui étendent les fonctionnalités des conteneurs de stock tels que les listes, les tuples, les ensembles et les dictionnaires. Avec ces conteneurs spéciaux, vous disposez non seulement des fonctionnalités des conteneurs de stockage, mais également de méthodes supplémentaires très utiles pour certaines tâches.
À la fin de ce didacticiel, vous aurez les connaissances suivantes :
- Qu'est-ce que le module de recouvrement ?
- Diverses fonctions comme :
- Contrer
- ChainMap
- Deque
- Tuple nommé
- Exemples de travail
Le module Collections est pré-installé dans Python, nous n'avons donc pas besoin de l'installer par pip. Nous pouvons simplement l'importer et vous êtes prêt à partir ! Passons en détail aux fonctions les plus utilisées.
Apprenez à apprendre la science des données dans les meilleures universités du monde. Gagnez des programmes Executive PG, des programmes de certificat avancés ou des programmes de maîtrise pour accélérer votre carrière.
Doit lire : Applications Python fascinantes dans le monde réel
Table des matières
Contrer
Le compteur est facilement la fonction la plus utilisée et la plus utile du module Collections. Counter est une sous-classe de la classe du dictionnaire en Python. Il compte le nombre d'occurrences de chaque élément dans un itérable (tels que des chaînes, des tuples, des listes, etc.) et le stocke dans un dictionnaire. Les clés du dictionnaire sont les éléments uniques de l'itérable et les valeurs sont le nombre de ces éléments.
Essayons avec quelques exemples.
Importer des collections Marvel = 'Bad Wolverine a intimidé le pauvre Iron Man Bad Wolverine le pauvre pauvre Iron Man' Marvel_count = collections.Counter(Marvel.split()) |
#Sortir: Compteur({ 'Mauvais' : 3 , 'Fer' : 2 , 'Homme' : 2 , 'Médiocre' : 2 , 'Carcajou' : 2 , 'intimidé' : 1 }) |
Comme on le voit, il comptait les occurrences de chaque élément et les mettait dans un dictionnaire. Cela peut être utilisé dans n'importe quel type d'itérable. Voyons maintenant quelles sont toutes les méthodes dont il dispose.
Marvel_count[ 'Mauvais' ] #>> 3 Marvel_count.values() #>> dict_values([3, 2, 1, 2, 2, 2]) Marvel_count.keys() #>> dict_keys(['Bad', 'Wolverine', 'bulled', 'Iron', 'Man', 'Poor']) |
La méthode most_common(n) renvoie une liste des n éléments les plus courants classés par ordre décroissant de nombre.
Marvel_count.most_common( 2 ) #>> [('Mauvais', 3), ('Carcajou', 2)] |
ChainMap
ChainMap est utilisé pour créer une vue unique de nombreux dictionnaires afin qu'ils puissent être consultés et mis à jour à partir de la vue unique, c'est-à-dire l'objet ChainMap lui-même. Gardez à l'esprit que ces ChainMaps se composent uniquement des références aux dictionnaires réels et que la mise à jour est également effectuée dans les dictionnaires réels eux-mêmes.
ChainMap est une extension de la classe du dictionnaire, donc toutes les méthodes du dictionnaire sont prises en charge, ainsi que quelques méthodes supplémentaires que nous allons passer en revue.
dic1 = { 'a' : 1 , 'b' : 2 } dic2 = { 'b' : 3 , 'c' : 4 } Dic3 = { 'b' : 9 , 'd' : 4 } chain1 = collections.ChainMap(dic2, dic1) chaîne1 |
Dans le code ci-dessus, nous définissons deux dictionnaires dic1 et dic2 et les plaçons dans un objet ChainMap.
#Sortir: ChainMap({ 'b' : 3 , 'c' : 4 }, { 'a' : 1 , 'b' : 2 }) |
Comme nous le voyons, dic2 est "chaîné" avec dic1 dans cet ordre même. Essentiellement, vous pouvez imaginer que dic2 soit connecté à dic1 comme dic2 -> dic1. Ainsi lorsque nous recherchons la clé 'b', il va d'abord chercher dans le premier mappage qui est dic2 et si la clé n'est pas trouvée, il ira aux mappages suivants.
Par conséquent, l'ordre du ChainMap est important pour déterminer quel mappage est recherché en premier. Voyons cela en action.
chaîne1[ 'b' ] #>> 3 |
Comme nous le voyons ci-dessus, ChainMap a la clé 'b' dans les deux dictionnaires. Ainsi, lorsque nous recherchons la clé 'b', elle recherche dans le premier mappage qui est dic2 et renvoie la valeur.
attribut de cartes
L'attribut maps ChainMap renvoie une liste de mappages dans l'ordre de recherche, c'est-à-dire que dic2 est le premier sur la carte, il sera donc recherché en premier et ainsi de suite.
chain1.maps #>> [{'b' : 3, 'c' : 4}, {'a' : 1, 'b' : 2}] |
De même, nous pouvons vérifier les clés et les valeurs :
liste(chain1.keys()) #>> ['a', 'c', 'b'] |
liste(chain1.values()) #>> [1, 4, 3] |
Comme nous le voyons, seules les clés uniques sont affichées ainsi que les valeurs.
new_child(m=Aucun)
La méthode new_child() est utilisée pour ajouter de nouvelles cartes dans le ChainMap. Cette méthode renvoie un nouveau ChainMap avec la nouvelle carte comme première carte suivie du reste des cartes. Si m est spécifié, il devient la première carte, sinon un dictionnaire vide est ajouté comme première carte.
chain1.new_child(dic3) chain1.maps |
#Sortir: [{ 'b' : 9 , 'd' : 4 }, { 'b' : 3 , 'c' : 4 }, { 'a' : 1 , 'b' : 2 }] |
Comme nous le voyons, il a ajouté le dic3 au début et a renvoyé un nouvel objet ChainMap.
renversé
Vous vous demandez peut-être comment vous pouvez modifier l'ordre de la ChainMap. Cela peut être réalisé en utilisant la fonction reversed qui renvoie un itérateur pour parcourir le ChainMap dans le sens inverse. Voyons cela en action.
La clé 'b' est maintenant dans toutes les cartes. La première carte de ChainMap a la clé 'b' avec la valeur 9.
chaîne1[ 'b' ] #>> 9 |
Voyons ce qui se passe une fois que nous avons itéré dans le sens inverse.
chain1.maps = inversé (chain1.maps) chaîne1[ 'b' ] #>> 2 |
Gardez à l'esprit que la fonction reverse n'inverse pas vraiment le mappage, elle donne juste un itérateur inversé.
Lire : Tutoriel Python
Deque
Deque (prononcé comme 'deck' ) est une extension des listes, mais une double fin. Deque signifie : Double Ended Queue parce que nous pouvons supprimer/faire sauter et ajouter des éléments à chaque extrémité de Deques efficacement contrairement aux listes où toutes les opérations sont sur le côté droit.
deque(iterable, maxlen) accepte les itérables et renvoie les objets deque. Ils ont également un paramètre maxlen qui décide de la limite supérieure du nombre d'éléments. S'il n'est pas spécifié, deque peut croître indéfiniment. Jetons un coup d'œil à ses méthodes rapides.

deq = collections.deque([ 1 , 2 , 3 , 4 , 5 ], maxlen= 6 ) deq.appendleft( 8 ) |
#Sortir: deque([ 8 , 1 , 2 , 3 , 4 , 5 ]) |
Comme nous le voyons, l'appel de la méthode appendleft a ajouté l'élément à l'extrémité gauche. De plus, comme nous l'avions initialisé avec maxlen comme 6 qu'il a maintenant atteint, l'ajout d'un autre élément lancera "StopIterationError".
Alors, supprimons l'élément le plus à gauche en utilisant popleft :
deq.popleft() #>> 8 |
Nous pouvons également supprimer un élément spécifique par valeur en utilisant remove :
deq.remove( 5 ) #>> deque([1, 2, 3, 4]) |
Remarque : l'appel de la méthode remove avec un élément qui n'est pas dans le deque lèvera une « ValueError ».
Nous pouvons insérer n'importe quel élément à l'index spécifié en utilisant insert(index, element) .
deq.insert( 2 , 7 ) #>> deque([1, 2, 7, 3, 4]) |
Deque peut être inversé en appelant la méthode reverse .
deq.reverse() #>> deque([4, 3, 7, 2, 1]) |
Deque peut également être tourné dans le sens des aiguilles d'une montre ou dans le sens inverse des aiguilles d'une montre en utilisant la méthode de rotation .
#Dans le sens des aiguilles d'une montredeq.rotate( 2 )#>> deque([2, 1, 4, 3, 7]) |
#Dans le sens inverse des aiguilles d'une montredeq.rotate( -2 )#>> deque([4, 3, 7, 2, 1]) |
Tuple nommé
namedtuple() est une grande amélioration de l'objet tuple habituel en Python. Les tuples nommés nous permettent d'indexer les éléments par leurs noms plutôt que par leurs positions. Vous pouvez considérer les tuples nommés comme des tables avec le nom de table comme nom de tuple et les noms de colonne comme noms d'index. Named Tuple attribue essentiellement une signification à chaque élément pour un accès plus facile et un code plus lisible.
Prenons quelques exemples et comprenons comment cela fonctionne.
Performance = collections.namedtuple( 'Employee_Rating' , [ 'Q1' , 'Q2' , 'Q3' , 'Q4' ]) |
Dans le code ci-dessus, nous avons défini un objet Tuple nommé "Performance" de nom "Employee_Rating" avec des noms de champ comme "Q1", "Q2", "Q3" et "Q4" qui stockera les notes trimestrielles des employés. Faisons 2 entrées de tuple nommées de Employee_Rating.
rahul = Performance( 3 , 4 , 3.5 , 4.5 ) ankit = Performance( 4 , 4.5 , 4 , 4.5 ) |
#Sortir: Évaluation_employé(Q1= 4 , Q2= 4.5 , Q3= 4 , Q4= 4.5 ) Évaluation_employé(Q1= 3 , Q2= 4 , Q3= 3.5 , Q4= 4.5 ) |
Maintenant que nous avons créé 2 entrées, nous pouvons y accéder par des noms d'index.
ankit.Q1 #>> 4 |
ankit.Q3 > rahul.Q3 #>> Vrai |
Pour ajouter de nouvelles entrées ou créer de nouveaux objets tuple nommés, nous pouvons utiliser la méthode _make() .
Milkha = Performance._make([ 4 , 5 , 5 , 4.5 ]) Milkha |
#Sortir: Évaluation_employé(Q1= 4 , Q2= 5 , Q3= 5 , Q4= 4.5 ) |
Nous pouvons modifier les éléments en utilisant la méthode _replace sur n'importe quel tuple nommé.
rahul._replace(Q1= 2 ) |
#Sortir: Évaluation_employé(Q1= 2 , Q2= 4 , Q3= 3.5 , Q4= 4.5 ) |
Avant que tu partes
Le module Collections a quelques fonctions plus utiles telles que OrderedDict, defaultdict, UserList, UserString, UserDict. Assurez-vous de maîtriser les fonctions dont nous avons parlé dans ce didacticiel. Ces types de conteneurs vous facilitent non seulement la vie, mais améliorent également la qualité du code que vous écrivez.
Si vous êtes curieux d'en savoir plus sur Python, la science des données, consultez le programme Executive PG en science des données de IIIT-B & upGrad qui est créé pour les professionnels en activité et propose plus de 10 études de cas et projets, des ateliers pratiques, du mentorat avec des experts de l'industrie. , 1-on-1 avec des mentors de l'industrie, plus de 400 heures d'apprentissage et d'aide à l'emploi avec les meilleures entreprises.
Qu'est-ce qu'un module de collecte et à quoi sert-il ?
Le module de collection de Python prend en charge plusieurs types de conteneurs. Un conteneur est un objet utilisé pour stocker divers éléments et donner les moyens de récupérer et d'itérer sur les objets inclus. Tuple, List, Dictionary et d'autres conteneurs intégrés sont disponibles. En outre, le module Collections possède des types de données de conteneur hautement spécialisés et efficaces, tels que namedtuple(), deque, OrderedDict, counter, etc., qui sont de loin supérieurs aux conteneurs Python standard.
Le module de collection est-il un sujet nécessaire pour Python ?
Oui, le module de collection est un sujet nécessaire lors de l'apprentissage de Python. Compter des objets, construire des files d'attente et des piles, gérer les clés manquantes dans les dictionnaires, etc. sont tous possibles avec le module de collections de Python. Les types de données et les classes des collections sont créés pour être efficaces et Pythonic. Ils sont très précieux pour votre carrière de programmeur Python, donc prendre le temps d'en apprendre davantage sur ce module de collection vaut bien votre temps et vos efforts. Les conteneurs du module Collections peuvent être très utiles pour les projets et modèles de niveau métier, ajoutant de manière significative à l'utilité des conteneurs Python génériques grâce à une optimisation et une vitesse d'exécution améliorées.
Quels sont les types de données présents dans le module de collecte ?
Plusieurs types de données sont présents dans le module de collecte, tels que deque, defaultdict, namedtuple, OrderedDict, Counter, ChainMap, UserDict, UserList, UserString, etc. Ces types de données peuvent être utilisés pour diverses raisons, telles que l'ajout et la suppression d'éléments de l'un ou l'autre fin de la séquence, en construisant des valeurs par défaut pour les clés manquantes et en les ajoutant automatiquement au dictionnaire. Ces types de données peuvent également aider en fournissant des champs nommés qui permettent d'accéder aux éléments par leur nom tout en conservant la possibilité d'accéder aux éléments par index, en comptant les éléments uniques dans une séquence ou itérable, et en traitant plusieurs mappages comme un seul objet de dictionnaire, etc.