0Pricing
Python Academy · Урок

namedtuple и OrderedDict

Другие полезные коллекции

«namedtuple и OrderedDict» — бесплатный урок Python Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Ещё две полезные коллекции

Модуль collections содержит namedtuple для создания понятных кортежей, похожих на записи, и OrderedDict для словарей с дополнительными методами управления порядком.

Импортируйте их с помощью from collections import namedtuple, OrderedDict.

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

Определение именованного кортежа

namedtuple(name, fields) создаёт новый подкласс кортежа. Вы передаёте имя типа и список имён полей. Результат представляет собой класс, экземпляры которого можно создавать.

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

Доступ по имени

Главное преимущество заключается в том, что поля можно читать по имени, а не по трудно запоминаемым индексам, благодаря чему код становится гораздо понятнее.

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

Это всё ещё кортеж

Именованный кортеж является обычным кортежем, поэтому индексация, распаковка и итерация по-прежнему работают.

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

Неизменяемый, но заменяемый

Как и все кортежи, именованные кортежи неизменяемы. Чтобы получить изменённую копию, используйте ._replace(): этот метод возвращает новый экземпляр.

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

Преобразование в словарь

._asdict() преобразует именованный кортеж в обычный словарь, сопоставляя имена полей со значениями.

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

Значения по умолчанию

Укажите defaults при определении именованного кортежа. Значения по умолчанию применяются к крайним правым полям, поэтому при создании экземпляров их можно не указывать.

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

Просмотр полей

Атрибут ._fields содержит имена полей. Это полезно для интроспекции или создания универсального кода.

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

Основы OrderedDict

OrderedDict запоминает порядок вставки. Начиная с Python 3.7 обычные словари тоже сохраняют порядок, но OrderedDict добавляет дополнительные методы управления порядком, которых иначе не получить.

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

move_to_end

.move_to_end(key) перемещает ключ в конец или в начало с помощью last=False. Это особенность OrderedDict, удобная для логики типа 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()))

Равенство с учётом порядка

Два объекта OrderedDict равны только в том случае, если их элементы расположены в одинаковом порядке. Обычные словари не учитывают порядок при сравнении.

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

Быстрая проверка

Как создать изменённую копию именованного кортежа, если он неизменяем?

Повторение: именованный кортеж и OrderedDict

Краткое содержание:

  • namedtuple(name, fields) создаёт понятные неизменяемые записи с доступом по именам.
  • Используйте ._replace() для создания изменённых копий, а ._asdict() — для преобразования в словарь.
  • OrderedDict сохраняет порядок вставки и добавляет .move_to_end().
  • При сравнении OrderedDict учитывает порядок, в отличие от обычного словаря.
from collections import namedtuple
Pt = namedtuple('Pt', ['x', 'y'])
print(Pt(1, 2)._asdict())

Часто задаваемые вопросы

Урок «namedtuple и OrderedDict» бесплатный?

Да — полный текст урока «namedtuple и OrderedDict» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «namedtuple и OrderedDict»?

Другие полезные коллекции Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «namedtuple и OrderedDict»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Counter
  2. defaultdict
  3. deque
  4. namedtuple и OrderedDict
← Назад к Python Academy