namedtuple og OrderedDict
Andre praktiske collections
namedtuple og OrderedDict er en gratis Python Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Python Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Python Academy-kurset indeholder 4 lektioner i alt.
To andre praktiske samlinger
Modulet collections indeholder namedtuple til læsevenlige tupellignende poster og OrderedDict til ordbøger med ekstra metoder til håndtering af rækkefølge.
Importér dem med from collections import namedtuple, OrderedDict.
from collections import namedtuple, OrderedDict
print(namedtuple)
print(OrderedDict)Definition af en namedtuple
namedtuple(name, fields) opretter en ny underklasse af tupel. Du angiver typenavnet og en liste over feltnavne. Resultatet er en klasse, du kan oprette forekomster af.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p)Adgang via navn
Den store fordel er, at du kan læse felter via deres navn i stedet for kryptiske indeksnumre, hvilket gør koden langt mere læsevenlig.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p.x)
print(p.y)Stadig en tupel
En namedtuple er en ægte tupel, så indeksering, udpakning og gennemløb fungerer stadig.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p[0])
x, y = p
print(x + y)Uforanderlig, men kan erstattes
Ligesom alle tupler er namedtuples uforanderlige. Brug ._replace() for at få en ændret kopi; metoden returnerer en ny forekomst.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
q = p._replace(y=10)
print(p)
print(q)Konvertering til en ordbog
._asdict() omdanner en namedtuple til en almindelig ordbog, der knytter feltnavne til værdier.
from collections import namedtuple
Car = namedtuple('Car', ['make', 'year'])
c = Car('Toyota', 2026)
print(c._asdict())Standardværdier
Angiv defaults, når du definerer en namedtuple. Standardværdierne gælder for felterne længst til højre, så du kan udelade dem, når du opretter forekomster.
from collections import namedtuple
User = namedtuple('User', ['name', 'role'], defaults=['guest'])
print(User('Alice'))
print(User('Bob', 'admin'))Undersøgelse af felter
Attributten ._fields viser feltnavnene og er nyttig til introspektion eller opbygning af generisk kode.
from collections import namedtuple
Color = namedtuple('Color', ['r', 'g', 'b'])
print(Color._fields)Grundlæggende om OrderedDict
OrderedDict husker indsættelsesrækkefølgen. Fra Python 3.7 bevarer almindelige ordbøger også rækkefølgen, men OrderedDict tilføjer ekstra metoder til håndtering af rækkefølge, som du ellers ikke kan få.
from collections import OrderedDict
od = OrderedDict()
od['first'] = 1
od['second'] = 2
print(od)move_to_end
.move_to_end(key) flytter en nøgle til slutningen eller til begyndelsen med last=False. Dette findes kun i OrderedDict og er praktisk til LRU-lignende logik.
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()))Lighed, der afhænger af rækkefølgen
To objekter af typen OrderedDict er kun ens, hvis deres elementer står i samme rækkefølge. Almindelige ordbøger ignorerer rækkefølgen ved sammenligninger.
from collections import OrderedDict
a = OrderedDict([('x', 1), ('y', 2)])
b = OrderedDict([('y', 2), ('x', 1)])
print(a == b)
print(dict(a) == dict(b))Hurtigt tjek
Hvordan opretter du en ændret kopi af en namedtuple, når den er uforanderlig?
Opsummering: namedtuple og OrderedDict
Opsummering:
namedtuple(name, fields)opretter læsevenlige, uforanderlige poster med adgang via navn.- Brug
._replace()til ændrede kopier og._asdict()til at konvertere til en ordbog. OrderedDictbevarer indsættelsesrækkefølgen og tilføjer.move_to_end().- Lighed mellem OrderedDict-objekter afhænger af rækkefølgen, i modsætning til almindelige ordbøger.
from collections import namedtuple
Pt = namedtuple('Pt', ['x', 'y'])
print(Pt(1, 2)._asdict())Lær Python med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 76
- Lektioner
- 320
Ofte stillede spørgsmål
Er lektionen “namedtuple og OrderedDict” gratis?
Ja — hele teksten til “namedtuple og OrderedDict” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Python Academy-kurset, skal du opgradere til CoddyKit PRO. Python Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “namedtuple og OrderedDict”?
Andre praktiske collections Du øver dig i Python Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Python Academy?
Der kræves ingen tidligere erfaring. Python Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “namedtuple og OrderedDict”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Python Academy-lektion?
Ja. Alle Python Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Counter
- defaultdict
- deque
- namedtuple og OrderedDict