Einführung
Das Modul collections
bietet eine Reihe nützlicher Objekte für die Datenverarbeitung. Dieser Teil stellt einige dieser Funktionen kurz vor.
This tutorial is from open-source community. Access the source code
💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken
Das Modul collections
bietet eine Reihe nützlicher Objekte für die Datenverarbeitung. Dieser Teil stellt einige dieser Funktionen kurz vor.
Angenommen, Sie möchten die Gesamtanteile jeder Aktie tabellieren.
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)
]
In dieser Liste gibt es zwei Einträge für IBM
und zwei Einträge für GOOG
. Die Anteile müssen auf irgend eine Weise zusammengefasst werden.
Lösung: Verwenden Sie einen Counter
.
from collections import Counter
total_shares = Counter()
for name, shares, price in portfolio:
total_shares[name] += shares
total_shares['IBM'] ## 150
Problem: Sie möchten einen Schlüssel zu mehreren Werten zuordnen.
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)
]
Wie im vorherigen Beispiel sollte der Schlüssel IBM
stattdessen zwei verschiedene Tupel haben.
Lösung: Verwenden Sie ein 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) ]
Das defaultdict
stellt sicher, dass Sie jedes Mal, wenn Sie auf einen Schlüssel zugreifen, einen Standardwert erhalten.
Problem: Wir möchten einen Verlauf der letzten N Dinge haben. Lösung: Verwenden Sie eine deque
.
from collections import deque
history = deque(maxlen=N)
with open(filename) as f:
for line in f:
history.append(line)
...
Das Modul collections
ist möglicherweise eines der nützlichsten Bibliotheksmodule für die Behandlung spezieller Arten von Datenverarbeitungsaufgaben wie der Tabellierung und Indizierung.
In dieser Übung betrachten wir einige einfache Beispiele. Beginnen Sie, indem Sie Ihr Programm report.py
ausführen, so dass Sie das Aktienportfolio im interaktiven Modus geladen haben.
$ python3 -i report.py
Angenommen, Sie möchten die Gesamtzahl der Anteile jeder Aktie tabellieren. Dies ist mit Counter
-Objekten einfach. Probieren Sie es aus:
>>> 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})
>>>
Beobachten Sie genau, wie die mehreren Einträge für MSFT
und IBM
in portfolio
hier zu einem einzelnen Eintrag zusammengefasst werden.
Sie können einen Zähler genauso wie ein Wörterbuch verwenden, um einzelne Werte abzurufen:
>>> holdings['IBM']
150
>>> holdings['MSFT']
250
>>>
Wenn Sie die Werte rangieren möchten, tun Sie Folgendes:
>>> ## Holen Sie sich die drei am häufigsten gehaltenen Aktien
>>> holdings.most_common(3)
[('MSFT', 250), ('IBM', 150), ('CAT', 150)]
>>>
Lassen Sie uns ein weiteres Aktienportfolio holen und einen neuen Zähler erstellen:
>>> 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})
>>>
Schließlich vereinigen wir alle Anteile mit einer einfachen Operation:
>>> 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})
>>>
Dies ist nur ein kleiner Vorgeschmack dessen, was Zähler bieten. Wenn Sie sich jedoch einmal merken, dass Sie Werte tabellieren müssen, sollten Sie einen davon in Betracht ziehen.
Das Modul collections
ist eines der nützlichsten Bibliotheksmodule in der gesamten Python-Welt. Tatsächlich könnten wir sogar einen erweiterten Tutorial dazu machen. Allerdings würde das auch zu einem Ablenkung sein. Lassen Sie collections
für jetzt auf Ihrer Liste der Bettzeitlektüre stehen, um es später zu lesen.
Herzlichen Glückwunsch! Sie haben das Labor zu dem Modul Collections abgeschlossen. Sie können in LabEx weitere Labs ausprobieren, um Ihre Fähigkeiten zu verbessern.