Поиск по сайту:
Мы должны быть ничем, но мы хотим стать всем (И. Гёте).

Использование Namedtuple в Python

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
12.06.2021
Python 3 - Обзор

Python поставляется со встроенным модулем, называемым коллекциями , который предоставляет различные классы и функции в качестве альтернативы встроенным в Python структурам данных, таким как dict, list, set и tuple.

В этой статье по Python будет обсуждаться namedtuple, одна из фабричных функций модуля collections. Мы рассмотрим все важные концепции Python namedtuple с примерами и синтаксисом.

 

Что такое Namedtuple в Python?

Namedtuple – это функция модуля collections в Python, расширения контейнера данных кортежа Python, которая позволяет нам получать доступ к элементам в кортеже, используя имена или метки. Мы можем определить новый класс кортежа, импортировав namedtuple из модуля коллекций Python и используя фабричную функцию namedtuple(). Короче говоря, именованный кортеж представляет собой комбинацию кортежа Python и типа данных dict.

 

Синтаксис Python Namedtuple

from collections import namedtuple

tuple_name = namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)

Среди 6 атрибутов namedtuple() только два являются обязательными, typename и fields_name, остальные – необязательными.

Имя типа представляет имя подкласса кортежа и используется для создания объектов, подобных кортежу.

Feild_names атрибут представляет имя метки для элементов кортежа. Это может быть строка, разделенная пробелами “fname lname dept salary” или список строк [‘fname’, ‘lname’, ‘dept’, ‘salary’].

 

Объявление Namedtuple в Python

Теперь давайте начнем с объявления именованного кортежа.

from collections import namedtuple

#Объявление в namedtuple
Employee = namedtuple("Employee", ['fname', 'lname', 'dept', 'salary'])

#Добавление значения в указанном наборе
e1 = Employee('Andrey', 'Ex', 'Marketing', 20000)

#значение доступа с меткой
print("Имя сотрудника e1 is:", e1.fname +" "+ e1.lname) # доступ к значению с использованием значения индекса print("Отдел сотрудника e1 is:", e1[2])

Вывод:

Имя сотрудника e1 is: AndreyEx
Отдел сотрудника e1 is: Marketing

Доступ к элементам из Namedtuple в Python

Есть три способа получить доступ к элементам из именованного кортежа, используя:

  • индекс (как кортеж)
  • имя поля/имя метки (например, словарь)
  • метод getattr()
from collections import namedtuple

#Объявление в namedtuple:
Employee = namedtuple("Employee", ['fname', 'lname', 'dept', 'salary'])

#добавление значения именованного кортежа:
e1 = Employee('Andrey', 'Ex', 'Marketing', 20000) # доступ к значению с использованием значения индекса: 
print("Employee (using index)", e1[0], e1[1], e1[2], e1[3]) 
# Доступ значения с меткой: 
print("Employee (using label)", e1.fname, e1.lname, e1.dept, e1.salary)
 
# Доступ значения используя getattr (): 
print("Employee (using getattr())", getattr(e1,'fname'), getattr(e1,'lname'), getattr(e1,'dept'), getattr(e1,'salary'))

Вывод:

Employee (using index) AndreyEx Marketing 20000
Employee (using label) AndreyEx Marketing 20000
Employee (using getattr()) AndreyEx Marketing 20000

Работа с Python Namedtuple

Именованные кортежи в Python неизменяемы.

Читать  Как установить TensorFlow на CentOS 8?

Как и обычный кортеж, именованные кортежи также неизменяемы. Это вызовет ошибку, если мы присвоим новое значение существующему номеру индекса или метке.

Пример:

from collections import namedtuple

#Объявление в namedtuple
Employee = namedtuple("Employee", ['fname', 'lname', 'dept', 'salary'])

#add значения в указанном наборе
e1 = Employee('Andrey', 'Ex', 'Marketing', 20000)

e1.fname ="John"   #  ошибка

Вывод:

AttributeError: невозможно установить атрибут

Преобразование именованного кортежа Python в словарь Python Именованный кортеж рассматривается как словарь, потому что каждый элемент именованного кортежа связан с меткой, как в словаре Python.

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

Пример:

From collections import namedtuple

#Объявление в namedtuple
Employee = namedtuple("Employee", ['fname', 'lname', 'dept', 'salary'])

# добавление значения в указанном наборе
e1 = Employee('Andrey', 'Ex', 'Marketing', 20000)

print(e1._asdict())

Вывод:

{'fname': 'Andrey', 'lname': 'Ex', 'dept': 'Marketing', 'salary': 20000}

Создание Namedtuple из объекта Python Iterable

Чтобы преобразовать итеративный объект, такой как кортеж, список, набор и словарь, в namedtuple, мы можем использовать метод namedtuple ._make () .

Пример:

From collections import namedtuple

#Объявление the namedtuple
Employee = namedtuple("Employee", ['fname', 'lname', 'dept', 'salary'])

# список
e1 = ['Alex', 'Terminat', 'Marketing', 20000]
# кортеж
e2 = ('Max', 'Bobikov', 'Marketing', 20000)


print(Employee._make(e1))
print(Employee._make(e2))

Вывод:

Employee(fname='Alex', lname='Terminat', dept='Marketing', salary=20000)
Employee(fname='Max', lname='Bobikov', dept='Marketing', salary=20000)

Преобразование словаря Python в именованный кортеж

Есть два способа преобразовать словарь Python в именованный кортеж.

Мы можем использовать оператор ** или метод словарных значений().

Пример:

From collections import namedtuple

#Объявление the namedtuple
Employee = namedtuple("Employee", ['fname', 'lname', 'dept', 'salary'])

# словарь
e1 ={'fname':'Sonia', 'lname':'Jenner', 'dept':'Management', 'salary':20000}

# с помощью ** operator
print(Employee(**e1))

# с помощью метода ._make()
print(Employee._make(e1.values()))

 

Вывод:

Employee(fname='Sonia', lname='Jenner', dept='Management', salary=20000) Employee(fname='Sonia', lname='Jenner', dept='Management', salary=20000)

Проверить все поля именованного кортежа Python Используя свойство _fields, мы можем все поля именованного кортежа

Читать  Проблемы с практикой Python. Приготовьтесь к следующему собеседованию. Решение головоломки судоку. Часть 4.2

Пример:

From collections import namedtuple

#Объявление namedtuple
Employee = namedtuple("Employee", ['fname', 'lname', 'dept', 'salary'])

print(Employee._fields)

Вывод:

('fname', 'lname', 'dept', 'salary')

Как изменить значение Namedtuple

Именованный набор неизменяем, и мы не можем изменить значения его атрибутов после объявления. Однако namedtuple предоставляет метод .replace (), который возвращает копию namedtuple с измененным значением атрибута.

Пример:

From collections import namedtuple

#Объявление в namedtuple
Employee = namedtuple("Employee", ['fname', 'lname', 'dept', 'salary'])

# добавьте значения в именованный кортеж
e1 = Employee('Andrey', 'Ex', 'Marketing', 20000)

print(e1._replace(fname='John'))

Вывод:

Employee(fname='John', lname='Ex', dept='Marketing', salary=20000)

Заключение

В заключение этой статьи по Python мы узнали, что называется кортежем в Python и как его объявить. Namedtuple – это комбинация кортежа Python и словаря Python, в котором доступ к элементам осуществляется с помощью как метки (ключа), так и номера индекса. Мы можем использовать namedtuple как обычный контейнер кортежей Python, и они пригодятся, когда мы хотим выполнить хеширование, используя только кортеж.

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

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

2 × 4 =

**ссылки nofollow

Рекомендуемое
Спар-фишинговые атаки - это атаки, основанные на социальной инженерии, известные…

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: