Поиск по сайту:
Время — великолепный учитель, но, к сожалению, оно убивает своих учеников (Г. Берлиоз).

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

01.12.2020
Python 3 - Обзор

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)

 

Читать  4 совета по оптимизации производительности для более быстрого кода на Python

 

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

 

Читать  Преобразование строки в байты в Python

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
На моноблоке все оборудование встроено в монитор и подставку. Эти…

Спасибо!

Теперь редакторы в курсе.