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
IndexErrorom ö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
IndexErrorom ö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
IndexErrorom inga objekt finns.
- popleft() Any¶
Ta bort och returnera ett objekt från vänstra sidan av kön. Genererar
IndexErrorom 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
IndexErrorom ö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
dictsom kommer ihåg och bevarar ordningen för tillagda nycklar. Accepterar samma konstruktorformer somdict(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 argumentetlast=Falseoch 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)