Kurzfassung des Moduls collections

PythonPythonBeginner
Jetzt üben

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

Einführung

Das Modul collections bietet eine Reihe nützlicher Objekte für die Datenverarbeitung. Dieser Teil stellt einige dieser Funktionen kurz vor.

Beispiel: Zählen von Dingen

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.

Zähler

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

Beispiel: Eindeutige-Mehrdeutige Zuordnungen

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.

Beispiel: Ein Verlauf aufzeichnen

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

Übung 2.18: Tabellieren mit Zählern

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.

Kommentar: Modul collections

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.

Zusammenfassung

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.