Présentation concise du module Collections

PythonPythonBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Le module collections fournit un certain nombre d'objets utiles pour la manipulation des données. Cette partie présente brièvement certaines de ces fonctionnalités.

Exemple : Compter des éléments

Disons que vous voulez tabuler le total des actions de chaque action.

portfolio = [
    ('GOOG', 100, 490.1),
    ('IBM', 50, 91.1),
    ('CAT', 150, 83.44),
    ('IBM', 100, 45.23),
    ('GOOG', 75, 572.45),
    ('AA', 50, 23.15)
]

Il y a deux entrées IBM et deux entrées GOOG dans cette liste. Les actions doivent être combinées de quelque manière.

Compteurs

Solution : Utiliser un Counter.

from collections import Counter
total_shares = Counter()
for name, shares, price in portfolio:
    total_shares[name] += shares

total_shares['IBM']     ## 150

Exemple : Mappages un-à-plusieurs

Problème : Vous voulez mapper une clé à plusieurs valeurs.

portfolio = [
    ('GOOG', 100, 490.1),
    ('IBM', 50, 91.1),
    ('CAT', 150, 83.44),
    ('IBM', 100, 45.23),
    ('GOOG', 75, 572.45),
    ('AA', 50, 23.15)
]

Comme dans l'exemple précédent, la clé IBM devrait avoir deux tuples différents.

Solution : Utiliser un defaultdict.

from collections import defaultdict
holdings = defaultdict(list)
for name, shares, price in portfolio:
    holdings[name].append((shares, price))
holdings['IBM'] ## [ (50, 91.1), (100, 45.23) ]

Le defaultdict assure que chaque fois que vous accédez à une clé, vous obtenez une valeur par défaut.

Exemple : Conserver une historique

Problème : Nous voulons une historique des N derniers éléments. Solution : Utiliser un deque.

from collections import deque

history = deque(maxlen=N)
with open(filename) as f:
    for line in f:
        history.append(line)
     ...

Le module collections est peut-être l'un des modules de bibliothèque les plus utiles pour traiter des problèmes de manipulation de données à usage spécifique tels que le tabulation et l'indexation.

Dans cet exercice, nous allons examiner quelques exemples simples. Commencez par exécuter votre programme report.py pour charger le portefeuille d'actions en mode interactif.

$ python3 -i report.py

Exercice 2.18 : Tabulation avec des Compteurs

Supposons que vous vouliez tabuler le nombre total d'actions de chaque action. C'est facile à faire avec des objets Counter. Essayez :

>>> portfolio = read_portfolio('portfolio.csv')
>>> from collections import Counter
>>> holdings = Counter()
>>> for s in portfolio:
        holdings[s['name']] += s['shares']

>>> holdings
Counter({'MSFT': 250, 'IBM': 150, 'CAT': 150, 'AA': 100, 'GE': 95})
>>>

Observez attentivement comment les multiples entrées pour MSFT et IBM dans portfolio sont combinées en une seule entrée ici.

Vous pouvez utiliser un Compteur tout comme un dictionnaire pour récupérer des valeurs individuelles :

>>> holdings['IBM']
150
>>> holdings['MSFT']
250
>>>

Si vous voulez classer les valeurs, faites ceci :

>>> ## Obtenez les trois actions les plus détenues
>>> holdings.most_common(3)
[('MSFT', 250), ('IBM', 150), ('CAT', 150)]
>>>

Prenons un autre portefeuille d'actions et créons un nouveau Compteur :

>>> portfolio2 = read_portfolio('portfolio2.csv')
>>> holdings2 = Counter()
>>> for s in portfolio2:
          holdings2[s['name']] += s['shares']

>>> holdings2
Counter({'HPQ': 250, 'GE': 125, 'AA': 50, 'MSFT': 25})
>>>

Enfin, combinons tous les portefeuilles en effectuant une simple opération :

>>> holdings
Counter({'MSFT': 250, 'IBM': 150, 'CAT': 150, 'AA': 100, 'GE': 95})
>>> holdings2
Counter({'HPQ': 250, 'GE': 125, 'AA': 50, 'MSFT': 25})
>>> combined = holdings + holdings2
>>> combined
Counter({'MSFT': 275, 'HPQ': 250, 'GE': 220, 'AA': 150, 'IBM': 150, 'CAT': 150})
>>>

Cela ne représente qu'un tout petit aperçu de ce que les Compteurs offrent. Cependant, si vous constatez que vous avez besoin de tabuler des valeurs, vous devriez envisager d'en utiliser un.

Commentaire : module collections

Le module collections est l'un des modules de bibliothèque les plus utiles de tout Python. En fait, on pourrait faire un tutoriel approfondi uniquement sur ce module. Cependant, le faire maintenant serait également une distraction. Pour l'instant, mettez collections sur votre liste de lectures pour le lit pour plus tard.

Sommaire

Félicitations ! Vous avez terminé le laboratoire sur le module Collections. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.