Python Academy · Lektion

namedtuple och OrderedDict

Andra praktiska samlingar

Lektion 4 av 413 steg

namedtuple och OrderedDict är en gratis lektion i Python Academy på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Python Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Python Academy innehåller totalt 4 lektioner.

Två andra praktiska samlingstyper

Modulen collections innehåller namedtuple för lättlästa tupler som liknar poster och OrderedDict för dictionaries med extra metoder för ordning.

Importera dem med from collections import namedtuple, OrderedDict.

from collections import namedtuple, OrderedDict
print(namedtuple)
print(OrderedDict)

Definiera en namedtuple

namedtuple(name, fields) skapar en ny underklass till tuple. Du anger typnamnet och en lista med fältnamn. Resultatet är en klass som du kan skapa instanser av.

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p)

Åtkomst via namn

Den stora fördelen är att du kan läsa fält via namn i stället för kryptiska indexnummer, vilket gör koden mycket mer lättläst.

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p.x)
print(p.y)

Fortfarande en tuple

En namedtuple är en riktig tuple, så indexering, uppackning och iteration fungerar fortfarande.

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p[0])
x, y = p
print(x + y)

Oföränderlig men ersättningsbar

Precis som alla tupler är namedtuples oföränderliga. Om du vill ha en ändrad kopia använder du ._replace(), som returnerar en ny instans.

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
q = p._replace(y=10)
print(p)
print(q)

Konvertera till en dictionary

._asdict() omvandlar en namedtuple till en vanlig dictionary som kopplar fältnamn till värden.

from collections import namedtuple
Car = namedtuple('Car', ['make', 'year'])
c = Car('Toyota', 2026)
print(c._asdict())

Standardvärden

Ange defaults när du definierar en namedtuple. Standardvärdena gäller de fält som står längst till höger, så du kan utelämna dem när du skapar instanser.

from collections import namedtuple
User = namedtuple('User', ['name', 'role'], defaults=['guest'])
print(User('Alice'))
print(User('Bob', 'admin'))

Inspektera fält

Attributet ._fields listar fältnamnen och är användbart för introspektion eller när du bygger generell kod.

from collections import namedtuple
Color = namedtuple('Color', ['r', 'g', 'b'])
print(Color._fields)

Grunderna i OrderedDict

OrderedDict kommer ihåg insättningsordningen. Sedan Python 3.7 behåller vanliga dictionaries också ordningen, men OrderedDict har extra metoder för att hantera ordningen som du inte får på annat sätt.

from collections import OrderedDict
od = OrderedDict()
od['first'] = 1
od['second'] = 2
print(od)

move_to_end

.move_to_end(key) flyttar en nyckel till slutet, eller till början med last=False. Detta är unikt för OrderedDict och praktiskt för logik av LRU-typ.

from collections import OrderedDict
od = OrderedDict(a=1, b=2, c=3)
od.move_to_end('a')
print(list(od.keys()))
od.move_to_end('c', last=False)
print(list(od.keys()))

Likhet som tar hänsyn till ordningen

Två OrderedDict-objekt är lika endast om deras element står i samma ordning. Vanliga dictionaries ignorerar ordningen vid jämförelser.

from collections import OrderedDict
a = OrderedDict([('x', 1), ('y', 2)])
b = OrderedDict([('y', 2), ('x', 1)])
print(a == b)
print(dict(a) == dict(b))

Snabbtest

Hur skapar du en ändrad kopia av en namedtuple, eftersom den är oföränderlig?

Sammanfattning: namedtuple och OrderedDict

Sammanfattning:

  • namedtuple(name, fields) skapar lättlästa, oföränderliga poster med åtkomst via namn.
  • Använd ._replace() för ändrade kopior och ._asdict() för att konvertera till en dictionary.
  • OrderedDict behåller insättningsordningen och lägger till .move_to_end().
  • Likhet för OrderedDict tar hänsyn till ordningen, till skillnad från för vanliga dictionaries.
from collections import namedtuple
Pt = namedtuple('Pt', ['x', 'y'])
print(Pt(1, 2)._asdict())
Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
76
Lektioner
320

Vanliga frågor

Är lektionen ”namedtuple och OrderedDict” gratis?

Ja – hela texten till ”namedtuple och OrderedDict” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Python Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Python Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”namedtuple och OrderedDict”?

Andra praktiska samlingar Ni övar på Python Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Python Academy?

Du behöver inga förkunskaper. Utbildningen i Python Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”namedtuple och OrderedDict”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Python Academy-lektionen?

Ja. Varje Python Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Counter
  2. defaultdict
  3. deque
  4. namedtuple och OrderedDict
← Tillbaka till Python Academy