0Pricing
Python Academy · Lekcja

namedtuple i OrderedDict

Poznaj inne przydatne kolekcje

namedtuple i OrderedDict to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.

Dwie kolejne przydatne kolekcje

Moduł collections zawiera namedtuple do tworzenia czytelnych krotek przypominających rekordy oraz OrderedDict — słowników z dodatkowymi metodami związanymi z kolejnością.

Można je zaimportować za pomocą from collections import namedtuple, OrderedDict.

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

Definiowanie namedtuple

namedtuple(name, fields) tworzy nową podklasę krotki. Przekazuje się jej nazwę typu oraz listę nazw pól. Wynikiem jest klasa, której można używać do tworzenia instancji.

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

Dostęp po nazwie

Najważniejsza zaleta polega na tym, że pola można odczytywać po nazwie zamiast za pomocą mało czytelnych numerów indeksów, co znacznie poprawia czytelność kodu.

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

To wciąż krotka

namedtuple jest prawdziwą krotką, więc nadal działają indeksowanie, rozpakowywanie i iterowanie.

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

Niemutowalna, ale możliwa do zastąpienia

Podobnie jak wszystkie krotki, namedtuple są niemutowalne. Aby uzyskać zmodyfikowaną kopię, należy użyć ._replace(), która zwraca nową instancję.

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

Konwertowanie na słownik

._asdict() przekształca namedtuple w zwykły słownik mapujący nazwy pól na wartości.

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

Wartości domyślne

Podczas definiowania namedtuple należy podać argument defaults. Wartości domyślne dotyczą pól znajdujących się najbardziej z prawej strony, dlatego można pominąć je podczas tworzenia instancji.

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

Sprawdzanie pól

Atrybut ._fields zawiera listę nazw pól, co jest przydatne podczas introspekcji lub tworzenia kodu ogólnego przeznaczenia.

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

Podstawy OrderedDict

OrderedDict zapamiętuje kolejność wstawiania elementów. Od wersji Python 3.7 zwykłe słowniki również zachowują kolejność, ale OrderedDict udostępnia dodatkowe metody do zarządzania kolejnością, których nie można uzyskać w inny sposób.

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

move_to_end

.move_to_end(key) przenosi klucz na koniec (lub na początek, gdy użyje się last=False). Ta metoda jest dostępna wyłącznie w OrderedDict i przydaje się w logice w stylu LRU.

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()))

Równość zależna od kolejności

Dwa obiekty OrderedDict są równe tylko wtedy, gdy ich elementy występują w tej samej kolejności. Zwykłe słowniki ignorują kolejność podczas porównań.

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

Szybkie sprawdzenie

Jak utworzyć zmodyfikowaną kopię namedtuple, skoro jest on niemutowalny?

Podsumowanie: namedtuple i OrderedDict

Podsumowanie:

  • namedtuple(name, fields) tworzy czytelne, niemutowalne rekordy z dostępem do pól po nazwie.
  • Proszę użyć ._replace(), aby utworzyć zmodyfikowaną kopię, oraz ._asdict(), aby przekonwertować obiekt na słownik.
  • OrderedDict zachowuje kolejność wstawiania i udostępnia metodę .move_to_end().
  • Równość OrderedDict zależy od kolejności elementów, inaczej niż w przypadku zwykłego słownika.
from collections import namedtuple
Pt = namedtuple('Pt', ['x', 'y'])
print(Pt(1, 2)._asdict())

Często zadawane pytania

Czy lekcja „namedtuple i OrderedDict” jest bezpłatna?

Tak — pełny tekst „namedtuple i OrderedDict” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „namedtuple i OrderedDict”?

Poznaj inne przydatne kolekcje Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Python Academy?

Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „namedtuple i OrderedDict”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?

Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Counter
  2. defaultdict
  3. deque
  4. namedtuple i OrderedDict
← Powrót do Python Academy