collections — collectie- en containertypen

Deze module biedt gespecialiseerde container-gegevenstypen die de ingebouwde typen list, tuple, dict en set aanvullen: een dubbelzijdige wachtrij (deque), een fabriek voor tuples met benoemde velden (namedtuple()) en een dict die de volgorde behoudt (OrderedDict).

Klassen

class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)

Deques (dubbelzijdige wachtrijen) zijn een lijstachtige container die O(1)-toevoegingen en -verwijderingen aan beide kanten van de deque ondersteunt. Nieuwe deques worden aangemaakt met de volgende argumenten:

  • iterable is een iterabel die wordt gebruikt om de deque te vullen bij het aanmaken. Dit kan een lege tuple of lijst zijn om een deque te maken die aanvankelijk leeg is.

  • maxlen moet worden opgegeven en de deque wordt begrensd tot deze maximale lengte. Zodra de deque vol is, zorgt elk nieuw toegevoegd item ervoor dat items aan de andere kant worden verwijderd.

  • De optionele flags kan 1 zijn om op overloop te controleren bij het toevoegen van items.

Deque-objecten ondersteunen bool, len(), iteratie en het laden en opslaan via subscript. Ze hebben ook de volgende methoden:

append(x: Any) None

Voeg x toe aan de rechterkant van de deque. Werpt IndexError op als overloopcontrole is ingeschakeld en er geen ruimte meer is in de wachtrij.

appendleft(x: Any) None

Voeg x toe aan de linkerkant van de deque. Werpt IndexError op als overloopcontrole is ingeschakeld en er geen ruimte meer is in de wachtrij.

pop() Any

Verwijder een item van de rechterkant van de deque en geef het terug. Werpt IndexError op als er geen items aanwezig zijn.

popleft() Any

Verwijder een item van de linkerkant van de deque en geef het terug. Werpt IndexError op als er geen items aanwezig zijn.

extend(iterable: Iterable) None

Breid de deque uit door alle items uit iterable aan de rechterkant van de deque toe te voegen. Werpt IndexError op als overloopcontrole is ingeschakeld en er geen ruimte meer is in de deque.

collections.namedtuple(name: str, fields: str | Sequence[str]) type

Dit is een fabrieksfunctie om een nieuw namedtuple-type te maken met een specifieke naam en set velden. Een namedtuple is een subklasse van tuple waarmee je toegang krijgt tot de velden, niet alleen via een numerieke index, maar ook met een attribuuttoegangssyntaxis die symbolische veldnamen gebruikt. Fields is een reeks strings die veldnamen opgeven. Voor compatibiliteit met CPython kan het ook een string met door spaties gescheiden veldnamen zijn (maar dit is minder efficiënt). Gebruiksvoorbeeld:

from collections import namedtuple

MyTuple = namedtuple("MyTuple", ("id", "name"))
t1 = MyTuple(1, "foo")
t2 = MyTuple(2, "bar")
print(t1.name)
assert t2.name == t2[1]

Instanties bieden ook de volgende methode:

collections._asdict() OrderedDict

Geeft de veldnamen en hun waarden terug als een OrderedDict.

class collections.OrderedDict(*args: Any, **kwargs: Any)

Subklasse van het dict-type die de volgorde van toegevoegde sleutels onthoudt en behoudt. Accepteert dezelfde constructorvormen als dict (een iterabel van (key, value)-paren, een andere mapping, of trefwoordargumenten). Wanneer over een ordered dict wordt geïtereerd, worden sleutels/items teruggegeven in de volgorde waarin ze zijn toegevoegd:

from collections import OrderedDict

# To make benefit of ordered keys, OrderedDict should be initialized
# from sequence of (key, value) pairs.
d = OrderedDict([("z", 1), ("a", 2)])
# More items can be added as usual
d["w"] = 5
d["b"] = 3
for k, v in d.items():
    print(k, v)

Uitvoer:

z 1
a 2
w 5
b 3
popitem() Tuple

Verwijder een (key, value)-paar uit de dictionary en geef het terug. Paren worden teruggegeven in LIFO-volgorde.

Verschil met CPython

OrderedDict.popitem() ondersteunt het argument last=False niet en zal altijd het laatste item verwijderen en teruggeven, indien aanwezig.

Een tijdelijke oplossing hiervoor is pop(<first_key>) te gebruiken om het eerste item te verwijderen:

first_key = next(iter(d))
d.pop(first_key)