collections — samlings- och behållartyper

Denna modul tillhandahåller specialiserade behållardatatyper som kompletterar de inbyggda list, tuple, dict och set: en dubbeländad kö (deque), en fabrik för tupler med namngivna fält (namedtuple()) och en ordningsbevarande dict (OrderedDict).

Klasser

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

Deques (dubbeländade köer) är en listliknande behållare som stöder O(1)-tillägg och -borttagningar från båda sidor av kön. Nya deques skapas med följande argument:

  • iterable är ett itererbart objekt som används för att fylla kön när den skapas. Det kan vara en tom tupel eller lista för att skapa en deque som inledningsvis är tom.

  • maxlen måste anges och kön begränsas till denna maximala längd. När kön är full kommer alla nya objekt som läggs till att kasta bort objekt från den motsatta änden.

  • Den valfria flags kan vara 1 för att kontrollera överskridning vid tillägg av objekt.

Deque-objekt stöder bool, len(), iteration samt indexläsning och -lagring. De har även följande metoder:

append(x: Any) None

Lägg till x på högra sidan av kön. Genererar IndexError om överskridningskontroll är aktiverad och det inte finns mer plats i kön.

appendleft(x: Any) None

Lägg till x på vänstra sidan av kön. Genererar IndexError om överskridningskontroll är aktiverad och det inte finns mer plats i kön.

pop() Any

Ta bort och returnera ett objekt från högra sidan av kön. Genererar IndexError om inga objekt finns.

popleft() Any

Ta bort och returnera ett objekt från vänstra sidan av kön. Genererar IndexError om inga objekt finns.

extend(iterable: Iterable) None

Utöka kön genom att lägga till alla objekt från iterable till höger i kön. Genererar IndexError om överskridningskontroll är aktiverad och det inte finns mer plats i kön.

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

Detta är en fabriksfunktion för att skapa en ny namedtuple-typ med ett specifikt namn och en uppsättning fält. En namedtuple är en subklass av tuple som tillåter åtkomst till sina fält inte bara via numeriskt index, utan även med en attributåtkomstsyntax som använder symboliska fältnamn. Fields är en sekvens av strängar som anger fältnamn. För kompatibilitet med CPython kan det även vara en sträng med mellanslagsseparerade fältnamn (men detta är mindre effektivt). Användningsexempel:

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]

Instanser tillhandahåller även följande metod:

collections._asdict() OrderedDict

Returnerar fältnamnen och deras värden som en OrderedDict.

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

Subklass av typen dict som kommer ihåg och bevarar ordningen för tillagda nycklar. Accepterar samma konstruktorformer som dict (ett itererbart objekt av (key, value)-par, en annan mappning eller nyckelordsargument). När en ordered dict itereras returneras nycklar/objekt i den ordning de lades till:

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)

Utdata:

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

Ta bort och returnera ett (key, value)-par från ordboken. Par returneras i LIFO-ordning.

Skillnad mot CPython

OrderedDict.popitem() stöder inte argumentet last=False och tar alltid bort och returnerar det sista objektet om sådant finns.

En lösning på detta är att använda pop(<first_key>) för att ta bort det första objektet:

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