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.
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
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.
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.
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
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.
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
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.
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.
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.