Контейнер Namedtuple в Python

Python предлагает множество встроенных структур данных, таких как списки, словари и кортежи, для эффективного хранения и управления данными. Namedtuple — это контейнер, подобный словарю, доступный в модуле «collections». Подобно словарям, namedtuple также содержит ключи, сопоставленные значениям. Однако namedtuple позволяет получить доступ к значениям через ключи, а также через индексы. По сравнению со словарями Python доступ к значениям через индексы является дополнительной функциональностью в namedtuple. В этой статье подробно описывается Python namedtuple с примерами.

 

Доступ к значениям из namedtuple

Доступ к значениям внутри namedtuple можно получить следующими способами:

  1. Используя ключи
  2. Используя индексы
  3. Используя функцию getattr()

Поскольку namedtuple преобразует поле в атрибуты, получить доступ к значениям можно с помощью функции getattr().

 

Примеры

Теперь давайте посмотрим на несколько примеров, чтобы понять создание и работу namedtuple. Чтобы создать и использовать namedtuple, сначала нам нужно импортировать модуль коллекций. В приведенном ниже примере создается именованный кортеж для учителя. Ключи именованного кортежа — это имя, возраст и отдел соответственно. Доступ к значениям осуществляется с помощью индексов и ключей.

# импорт модуля коллекций



import collections



# создание именованного кортежа для учителя #



имя, возраст и отдел - это ключи



Teacher = collections . namedtuple('Teacher',['name', 'age', 'department' ])



# создать нового учителя и добавить значения



Teacher_AndreyEx = Teacher("AndreyEx", 35, "Computer Science")

# доступ к значениям учителя с помощью indexes print(«Доступ к значениям с помощью индексов:») print(«Имя учителя:», teacher_AndreyEx[0]) print(«Возраст учителя:», teacher_AndreyEx[1]) print(«Отдел учителя:», teacher_AndreyEx[2])

 

 

# доступ к значениям учителя с помощью клавиш print(«Доступ к значениям с помощью ключей:») print(«Имя учителя:», teacher_AndreyEx.name) print(«Возраст учителя:», teacher_AndreyEx.age) print(«Учительский отдел:», teacher_AndreyEx.department)

 

 

Теперь давайте обратимся к значениям с помощью функции 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(). В этой статье на примерах кратко объясняется именованный кортеж.



2020-12-01T16:14:14
Python