Python-Sammlungsmodul: Counter, ChainMap, Deque & Tuple
Veröffentlicht: 2020-12-01Das Python Collections-Modul bietet eine Reihe von Containerdatentypen, die die Funktionen von Bestandscontainern wie Listen, Tupeln, Sätzen und Wörterbüchern erweitern. Mit diesen Spezialbehältern haben Sie nicht nur die Eigenschaften von Vorratsbehältern, sondern auch einige zusätzliche Methoden, die für bestimmte Aufgaben sehr praktisch sind.
Am Ende dieses Tutorials verfügen Sie über folgende Kenntnisse:
- Was ist das Inkassomodul?
- Verschiedene Funktionen wie:
- Schalter
- ChainMap
- Deque
- Benanntes Tupel
- Arbeitsbeispiele
Das Collections-Modul ist in Python vorinstalliert, sodass wir es nicht per Pip installieren müssen. Wir können es einfach importieren und schon kann es losgehen! Gehen wir im Detail auf die meistgenutzten Funktionen ein.
Lernen Sie Data Science von den besten Universitäten der Welt. Verdienen Sie Executive PG-Programme, Advanced Certificate-Programme oder Master-Programme, um Ihre Karriere zu beschleunigen.
Muss gelesen werden: Faszinierende Python-Anwendungen in der realen Welt
Inhaltsverzeichnis
Schalter
Der Zähler ist mit Abstand die am häufigsten verwendete und nützlichste Funktion im Sammlungsmodul. Counter ist eine Unterklasse der Dictionary-Klasse in Python. Es zählt die Anzahl der Vorkommen jedes Elements in einer Iterable (z. B. Zeichenfolgen, Tupel, Listen usw.) und speichert sie in einem Wörterbuch. Die Wörterbuchschlüssel sind die eindeutigen Elemente im Iterable und die Werte sind die Anzahl dieser Elemente.
Probieren wir es an einigen Beispielen aus.
Sammlungen importieren Marvel = 'Bad Wolverine hat den armen Iron Man gemobbt Bad Wolverine armer armer Iron Man' Marvel_count = Sammlungen.Zähler(Marvel.split()) |
#Ausgabe: Counter({ 'Schlecht' : 3 , 'Eisen' : 2 , 'Mann' : 2 , 'Arm' : 2 , 'Vielfraß' : 2 , 'gemobbt' : 1 }) |
Wie wir sehen, wurden die Vorkommen jedes Elements gezählt und in ein Wörterbuch eingetragen. Dies kann in jeder Art von Iterable verwendet werden. Lassen Sie uns nun sehen, welche Methoden es hat.
Marvel_count[ 'Schlecht' ] #>> 3 Marvel_count.values() #>> dict_values([3, 2, 1, 2, 2, 2]) Marvel_count.keys() #>> dict_keys(['Bad', 'Wolverine', 'mobbing', 'Iron', 'Man', 'Arm']) |
Die Methode most_common(n) gibt eine Liste der n häufigsten Elemente zurück, die in absteigender Reihenfolge der Anzahl angeordnet sind.
Marvel_count.most_common( 2 ) #>> [('Schlecht', 3), ('Wolverine', 2)] |
ChainMap
ChainMap wird verwendet, um eine einzelne Ansicht vieler Wörterbücher zu erstellen, sodass sie von der einzelnen Ansicht, dh dem ChainMap-Objekt selbst, aufgerufen und aktualisiert werden können. Denken Sie daran, dass diese ChainMaps nur aus den Verweisen auf die eigentlichen Wörterbücher bestehen und die Aktualisierung auch in den eigentlichen Wörterbüchern selbst erfolgt.
ChainMap ist eine Erweiterung der Dictionary-Klasse, sodass alle Dictionary-Methoden unterstützt werden, plus ein paar zusätzliche Methoden, auf die wir noch eingehen werden.
dic1 = { 'a' : 1 , 'b' : 2 } dic2 = { 'b' : 3 , 'c' : 4 } Dic3 = { 'b' : 9 , 'd' : 4 } Kette1 = Sammlungen.ChainMap(dic2, dic1) Kette1 |
Im obigen Code definieren wir zwei Wörterbücher dic1 und dic2 und fügen sie in ein ChainMap-Objekt ein.
#Ausgabe: ChainMap({ 'b' : 3 , 'c' : 4 }, { 'a' : 1 , 'b' : 2 }) |
Wie wir sehen, ist dic2 in genau dieser Reihenfolge mit dic1 „ verkettet“ . Im Wesentlichen können Sie sich vorstellen, dass dic2 mit dic1 wie dic2–>dic1 verbunden ist. Wenn wir also nach dem Schlüssel 'b' suchen, wird zuerst in der ersten Zuordnung gesucht, die dic2 ist, und wenn der Schlüssel nicht gefunden wird, geht es zu den nächsten Zuordnungen.
Daher ist die Reihenfolge der ChainMap wichtig, um zu bestimmen, welche Zuordnung zuerst durchsucht wird. Sehen wir uns das in Aktion an.
Kette1[ 'b' ] #>> 3 |
Wie wir oben sehen, hat ChainMap in beiden Wörterbüchern den Schlüssel 'b'. Wenn wir also nach dem Schlüssel „b“ suchen, sucht er in der ersten Zuordnung, die dic2 ist, und gibt den Wert zurück.
maps-Attribut
Das maps-Attribut ChainMap gibt eine Liste von Mappings in der Reihenfolge der Suche zurück, dh dic2 ist zuerst in der Map, also wird es zuerst durchsucht und so weiter.
chain1.maps #>> [{'b': 3, 'c': 4}, {'a': 1, 'b': 2}] |
Ebenso können wir nach Schlüsseln und Werten suchen:
list(chain1.keys()) #>> ['a', 'c', 'b'] |
list(chain1.values()) #>> [1, 4, 3] |
Wie wir sehen, werden nur die eindeutigen Schlüssel angezeigt und auch die Werte.
new_child(m=Keine)
Die Methode new_child() wird verwendet, um der ChainMap neue Karten hinzuzufügen. Diese Methode gibt eine neue ChainMap mit der neuen Karte als erste Karte zurück, gefolgt von den restlichen Karten. Wenn m angegeben ist, wird es die erste Karte, andernfalls wird ein leeres Wörterbuch als erste Karte hinzugefügt.
chain1.new_child(dic3) chain1.maps |
#Ausgabe: [{ 'b' : 9 , 'd' : 4 }, { 'b' : 3 , 'c' : 4 }, { 'a' : 1 , 'b' : 2 }] |
Wie wir sehen, fügte es am Anfang dic3 hinzu und gab ein neues ChainMap-Objekt zurück.
rückgängig gemacht
Sie fragen sich vielleicht, wie Sie die Reihenfolge der ChainMap ändern können. Dies kann mit der umgekehrten Funktion erreicht werden, die einen Iterator zum Durchlaufen der ChainMap in umgekehrter Richtung zurückgibt. Sehen wir uns das in Aktion an.
Der Schlüssel 'b' ist jetzt in allen Karten. Die erste Karte in der ChainMap hat den Schlüssel „b“ mit dem Wert 9.
Kette1[ 'b' ] #>> 9 |
Mal sehen, was passiert, wenn wir in umgekehrter Richtung iterieren.
chain1.maps = umgekehrt (chain1.maps) Kette1[ 'b' ] #>> 2 |
Denken Sie daran, dass die umgekehrte Funktion die Zuordnung nicht wirklich umkehrt, sondern nur einen umgekehrten Iterator ergibt.
Lesen Sie: Python-Tutorial
Deque
Deque (ausgesprochen als 'Deck' ) ist eine Erweiterung von Listen, aber eine mit zwei Enden. Deque steht für: Double Ended Queue, weil wir im Gegensatz zu Listen, bei denen sich alle Operationen auf der rechten Seite befinden, Elemente an beiden Enden von Deques effizient entfernen / einfügen und anhängen können.

deque(iterable, maxlen) nimmt Iterables auf und gibt deque-Objekte zurück. Sie haben auch einen maxlen-Parameter, der die Obergrenze für die Anzahl der Elemente festlegt. Wenn nicht angegeben, kann deque unbegrenzt wachsen. Werfen wir einen Blick auf seine bissigen Methoden.
deq = Sammlungen.deque([ 1 , 2 , 3 , 4 , 5 ], maxlen= 6 ) deq.appendleft( 8 ) |
#Ausgabe: deque([ 8 , 1 , 2 , 3 , 4 , 5 ]) |
Wie wir sehen, wurde beim Aufrufen der appendleft- Methode das Element am linken Ende angehängt. Da wir es mit maxlen als 6 initialisiert hatten, was es jetzt erreicht hat, wird das Anhängen eines weiteren Elements „StopIterationError“ auslösen.
Entfernen wir also das Element ganz links mit popleft :
deq.popleft() #>> 8 |
Wir können auch ein bestimmtes Element nach Wert entfernen, indem wir remove verwenden:
deq.entfernen( 5 ) #>> deque([1, 2, 3, 4]) |
Hinweis: Der Aufruf der Methode remove mit einem Element, das sich nicht in der Deque befindet, löst einen „ValueError“ aus.
Wir können jedes Element am angegebenen Index mit insert(index, element) einfügen .
deq.insert( 2 , 7 ) #>> deque([1, 2, 7, 3, 4]) |
Deque kann durch Aufrufen der Reverse - Methode rückgängig gemacht werden.
deq.reverse() #>> deque([4, 3, 7, 2, 1]) |
Deque kann auch mit der Rotationsmethode im oder gegen den Uhrzeigersinn gedreht werden.
#Im Uhrzeigersinndeq.drehen( 2 )#>> deque([2, 1, 4, 3, 7]) |
#Gegen den Uhrzeigersinndeq.drehen( -2 )#>> deque([4, 3, 7, 2, 1]) |
Benanntes Tupel
namedtuple() ist eine großartige Verbesserung des üblichen Tuple-Objekts in Python. Benannte Tupel ermöglichen es uns, Elemente nach ihren Namen und nicht nur nach Positionen zu indizieren. Sie können sich benannte Tupel als Tabellen vorstellen, bei denen der Tabellenname der Tupelname und die Spaltennamen die Indexnamen sind. Named Tuple weist im Wesentlichen jedem Element eine Bedeutung zu, um den Zugriff zu erleichtern und den Code besser lesbar zu machen.
Lassen Sie uns einige Beispiele nehmen und verstehen, wie es funktioniert.
Leistung = collections.namedtuple( 'Employee_Rating' , [ 'Q1' , 'Q2' , 'Q3' , 'Q4' ]) |
Im obigen Code haben wir ein Benanntes Tupel-Objekt „Performance“ mit dem Namen „Employee_Rating“ mit Feldnamen wie „Q1“, „Q2“, „Q3“ und „Q4“ definiert, das vierteljährliche Bewertungen der Mitarbeiter speichert. Lassen Sie uns zwei benannte Tupeleinträge von Employee_Rating erstellen.
rahul = Leistung( 3 , 4 , 3,5 , 4,5 ) ankit = Leistung ( 4 , 4,5 , 4 , 4,5 ) |
#Ausgabe: Mitarbeiter_Bewertung(Q1= 4 , Q2= 4,5 , Q3= 4 , Q4= 4,5 ) Mitarbeiter_Bewertung(Q1= 3 , Q2= 4 , Q3= 3.5 , Q4= 4.5 ) |
Nachdem wir nun 2 Einträge erstellt haben, können wir über Indexnamen auf sie zugreifen.
ankit.Q1 #>> 4 |
ankit.Q3 > rahul.Q3 #>> Richtig |
Um neue Einträge hinzuzufügen oder neue benannte Tupelobjekte zu erstellen, können wir die Methode _make() verwenden.
Milkha = Leistung._make([ 4 , 5 , 5 , 4.5 ]) Milkha |
#Ausgabe: Mitarbeiter_Bewertung(Q1= 4 , Q2= 5 , Q3= 5 , Q4= 4.5 ) |
Wir können die Elemente bearbeiten, indem wir die Methode _replace für jedes benannte Tupel verwenden.
rahul._replace(Q1= 2 ) |
#Ausgabe: Mitarbeiter_Bewertung(Q1= 2 , Q2= 4 , Q3= 3.5 , Q4= 4.5 ) |
Bevor du gehst
Das Collections-Modul hat ein paar weitere nützliche Funktionen wie OrderedDict, defaultdict, UserList, UserString, UserDict. Stellen Sie sicher, dass Sie die Funktionen, die wir in diesem Tutorial besprochen haben, in die Hand nehmen. Diese Containertypen machen Ihnen nicht nur das Leben leichter, sondern verbessern auch die Qualität des von Ihnen geschriebenen Codes.
Wenn Sie neugierig sind, mehr über Python und Data Science zu erfahren, schauen Sie sich das Executive PG Program in Data Science von IIIT-B & upGrad an, das für Berufstätige entwickelt wurde und mehr als 10 Fallstudien und Projekte, praktische Workshops und Mentoring mit Branchenexperten bietet , 1-on-1 mit Mentoren aus der Branche, über 400 Stunden Lern- und Jobunterstützung bei Top-Unternehmen.
Was ist ein Sammelmodul und wozu dient es?
Das Sammlungsmodul von Python unterstützt mehrere Arten von Containern. Ein Container ist ein Objekt, das verwendet wird, um verschiedene Elemente zu speichern und die Mittel bereitzustellen, um die eingeschlossenen Objekte abzurufen und zu durchlaufen. Tuple, List, Dictionary und weitere integrierte Container sind verfügbar. Außerdem verfügt das Collections-Modul über hoch spezialisierte und effiziente Container-Datentypen wie namedtuple(), deque, OrderedDict, counter usw., die Standard-Python-Containern weit überlegen sind.
Ist das Sammlungsmodul ein notwendiges Thema für Python?
Ja, das Sammlungsmodul ist ein notwendiges Thema beim Erlernen von Python. Das Zählen von Objekten, das Erstellen von Warteschlangen und Stapeln, das Verwalten fehlender Schlüssel in Wörterbüchern und mehr ist mit dem Sammlungsmodul von Python möglich. Die Datentypen und Klassen von Sammlungen werden so erstellt, dass sie effizient und pythonisch sind. Sie sind für Ihre Python-Programmierkarriere ziemlich wertvoll, daher lohnt es sich, sich die Zeit zu nehmen, sich mit diesem Sammlungsmodul vertraut zu machen. Die Container im Sammlungsmodul können für Projekte und Modelle auf Geschäftsebene sehr nützlich sein, da sie durch verbesserte Optimierung und Ausführungsgeschwindigkeit erheblich zur Nützlichkeit generischer Python-Container beitragen.
Welche Datentypen sind im Erfassungsmodul vorhanden?
Im Sammlungsmodul sind mehrere Datentypen vorhanden, z. B. deque, defaultdict, namedtuple, OrderedDict, Counter, ChainMap, UserDict, UserList, UserString usw. Diese Datentypen können aus verschiedenen Gründen verwendet werden, z. B. zum Hinzufügen und Entfernen von Elementen aus beiden Ende der Sequenz, Erstellen von Standardwerten für fehlende Schlüssel und automatisches Hinzufügen zum Wörterbuch. Diese Datentypen können auch helfen, indem sie benannte Felder bereitstellen, die den Zugriff auf Elemente nach Namen ermöglichen, während die Möglichkeit erhalten bleibt, auf Elemente nach Index zuzugreifen, eindeutige Elemente in einer Sequenz oder iterierbar zu zählen und mehrere Zuordnungen als ein einziges Wörterbuchobjekt zu behandeln usw.