Python предлагает множество встроенных структур данных, таких как списки, словари и кортежи, для эффективного хранения и управления данными. Namedtuple – это контейнер, подобный словарю, доступный в модуле «collections». Подобно словарям, namedtuple также содержит ключи, сопоставленные значениям. Однако namedtuple позволяет получить доступ к значениям через ключи, а также через индексы. По сравнению со словарями Python доступ к значениям через индексы является дополнительной функциональностью в namedtuple. В этой статье подробно описывается Python namedtuple с примерами.
Доступ к значениям из namedtuple
Доступ к значениям внутри namedtuple можно получить следующими способами:
- Используя ключи
- Используя индексы
- Используя функцию getattr()
Поскольку namedtuple преобразует поле в атрибуты, получить доступ к значениям можно с помощью функции getattr().
Примеры
Теперь давайте посмотрим на несколько примеров, чтобы понять создание и работу namedtuple. Чтобы создать и использовать namedtuple, сначала нам нужно импортировать модуль коллекций. В приведенном ниже примере создается именованный кортеж для учителя. Ключи именованного кортежа – это имя, возраст и отдел соответственно. Доступ к значениям осуществляется с помощью индексов и ключей.
# импорт модуля коллекций import collections # создание именованного кортежа для учителя # имя, возраст и отдел - это ключи Teacher = collections . namedtuple('Teacher',['name', 'age', 'department' ]) # создать нового учителя и добавить значения Teacher_AndreyEx = Teacher("AndreyEx", 35, "Computer Science")
Теперь давайте обратимся к значениям с помощью функции getattr(). Именованный кортеж и ключ передаются в качестве аргумента функции getattr().
# импорт модуля коллекций import collections # создание именованного кортежа для учителя # имя, возраст и отдел - это ключи Teacher = collections . namedtuple('Teacher', ['name', 'age', ' department ']) # создать нового учителя и добавить значения Teacher_AndreyEx = Teacher("AndreyEx", 35, "Computer Science") # доступ к значениям учителя с помощью функция getattr() print(getattr (teacher_AndreyEx, "name")) print(getattr(teacher_AndreyEx, "age")) print( getattr( teacher_AndreyEx, "department" ) )
Популярные операции namedtuple
Некоторые популярные функции преобразуют другие коллекции, такие как списки, словари и кортежи, в namedtuple и возвращают информацию об namedtuple. Ниже приведены функции, которые преобразуют другие коллекции в namedtuple:
- _сделать()
- _asdict()
- оператор **
Функция _make() преобразует итерируемый объект, такой как список и кортеж, в именованный набор. Функция _asdict() создает orderDict из именованного кортежа и возвращает его. Наконец, оператор ** преобразует словарь в именованный набор. Кроме того, функции, возвращающие информацию namedtuple, следующие:
- _fields
- _replace()
Функция _fields() возвращает все поля именованного кортежа, тогда как функция _replace() заменяет конкретное значение другим значением.
Давайте реализуем упомянутые выше функции в нашем скрипте Python для преобразования различных коллекций в namedtuple.
# импорт модуля коллекций import collections # создание именованного кортежа для учителя # имя, возраст и отдел - это ключи Teacher = collections.namedtuple('Teacher', ['name', 'age', 'department' ]) # создать нового учителя и добавить значения Teacher_AndreyEx = Teacher("AndreyEx", 35, "Computer Science") # создать список Teacher_list =["Alex","Business Administration" ] # создание словаря teacher_dict = { 'name' : 'Maria', 'age' : 25, 'department' : 'Economics' } # используя функцию _make() для преобразования списка в namedtuple print("List to преобразование namedtuple: ") print(Teacher._make(teacher_list)) # использование функции _asdict() для создания OrderDict print(" Making the OrderedDict: ") print(teacher_AndreyEx._asdict()) # использование ** для преобразования словаря в именованный кортеж print("Преобразование словаря в именованный кортеж:") print(Учитель(** teacher_dict))
Теперь давайте воспользуемся функциями _fields() и _replace(), чтобы получить информацию о ключах и заменить ключи соответственно.
# импорт модуля коллекций import collections # создание именованного кортежа для учителя # имя, возраст и отдел - это ключи Teacher = collections.namedtuple('Teacher',['name', 'age', 'department' ]) # создайте нового учителя и добавив значения Teacher_AndreyEx = Teacher("AndreyEx", 35, "Computer Science") # используя функцию _fields, чтобы получить ключи namedtuple print("Ключи namedtuple:") print(Teacher._fields) # использование функции _replace для замены значения print("Значение замены имени:") print(teacher_AndreyEx._replace(name = 'Master'))
В выходных данных видно, что функция _fields возвращает ключи информации, а функция _replace() успешно заменяет имя.
Вывод
Namedtuple – это контейнер, подобный словарю, присутствующий в модуле «коллекции». Он содержит ключ и сопоставляет значения с ключом. В отличие от словаря Python, к значениям namedtuples также можно получить доступ с помощью индексов и функции getattr(). В этой статье на примерах кратко объясняется именованный кортеж.