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

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 неизменяемы.

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

Пример:

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, мы можем все поля именованного кортежа

Пример:

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, и они пригодятся, когда мы хотим выполнить хеширование, используя только кортеж.



2021-06-12T18:25:35
Python