logo

Namedtuple у Python

Python підтримує тип контейнерного словника під назвою namedtuple() присутні в модулі колекції . У цій статті ми побачимо, як створити NameTuple і операції з NamedTuple.

Що таке NamedTuple у Python?

в Python , NamedTuple присутній усередині модуль колекцій . Він забезпечує спосіб створення простих, легких структур даних, подібних до класу, але без накладних витрат на визначення повного класу. Як і словники, вони містять ключі, хешовані до певного значення. Навпаки, він підтримує як доступ із ключ-значення, так і ітерацію, функціональність, яка словники відсутність.

Синтаксис Python NamedTuple

namedtuple(typename, field_names)



  • typename – ім’я іменованого кортежу.
  • field_names – список атрибутів, що зберігаються в namedtuple.

приклад: Реалізація коду NamedTuple показана в Python .

вирівняти зображення за допомогою css
Python3
# Python code to demonstrate namedtuple() from collections import namedtuple # Declaring namedtuple() Student = namedtuple('Student', ['name', 'age', 'DOB']) # Adding values S = Student('Nandini', '19', '2541997') # Access using index print('The Student age using index is : ', end='') print(S[1]) # Access using name print('The Student name using keyname is : ', end='') print(S.name)>

Вихід
The Student age using index is : 19 The Student name using keyname is : Nandini>

Операції над NamedTuple

Нижче наведено такі операції, які можна виконати за допомогою namedtuple():

  • Створіть NameTuple
  • Операції доступу
  • Конверсійні операції
  • Додаткові операції

Створіть NameTuple у Python

Це створює новий клас namedtuple за допомогою функції namedtuple() з колекції модуль. Перший аргумент — це ім’я нового класу, а другий — список імен полів.

сортування масиву Java
Python3
from collections import namedtuple Point = namedtuple('Point', ['x', 'y']) p = Point(x=1, y=2) print(p.x, p.y)>

Вихід
1 2>

Операції доступу

Іменовані кортежі в Python забезпечують зручні способи доступу до їхніх полів. Нижче наведено деякі операції доступу, надані в Python для NamedTuple:

  • Доступ за індексом
  • Доступ за іменем ключа
  • Доступ за допомогою getattr()

Доступ за індексом

Значення атрибутів namedtuple() упорядковані, і до них можна отримати доступ за допомогою номера індексу, на відміну від словників, які не доступні за індексом. У цьому прикладі ми отримуємо доступ до студента за допомогою індексу.

Python3
# importing 'collections' for namedtuple() import collections # Declaring namedtuple() Student = collections.namedtuple('Student', ['name', 'age', 'DOB']) # Adding values S = Student('Nandini', '19', '2541997') # Access using index print('The Student age using index is : ', end='') print(S[1])>

Вихід
The Student age using index is : 19>

Доступ за іменем ключа

Доступ за назвою ключа також дозволено, як і в словниках. У цьому прикладі ми використовуємо keyname для доступу до імені студента.

Python3
# importing 'collections' for namedtuple() import collections # Declaring namedtuple() Student = collections.namedtuple('Student', ['name', 'age', 'DOB']) # Adding values S = Student('Nandini', '19', '2541997') # Access using name print('The Student name using keyname is : ', end='') print(S.name)>

Вихід
The Student name using keyname is : Nandini>

Доступ за допомогою getattr()

Це ще один спосіб отримати доступ до значення, вказавши namedtuple і значення ключа як його аргумент. У цьому прикладі ми використовуємо getattr() для доступу до ідентифікатора студента в заданому namedtuple.

Python3
# importing 'collections' for namedtuple() import collections # Declaring namedtuple() Student = collections.namedtuple('Student', ['name', 'age', 'DOB']) # Adding values S = Student('Nandini', '19', '2541997') # Access using getattr() print('The Student DOB using getattr() is : ', end='') print(getattr(S, 'DOB'))>

Вихід
The Student DOB using getattr() is : 2541997>

Конверсійні операції

Іменовані кортежі надають кілька корисних операцій перетворення для роботи з іншими типами даних Python . Нижче наведено такі операції перетворення, які надаються для іменованих кортежів у Python:

що робить ravel у python
  • Використання _make()
  • Використання _asdict()
  • Використання оператора ** (подвійна зірочка).

Перетворення за допомогою _make()

Ця функція використовується для повернення a namedtuple() з iterable прийнято як аргумент. У цьому прикладі ми використовуємо _make() для перетворення списку li в namedtuple.

Python3
# importing 'collections' for namedtuple() import collections # Declaring namedtuple() Student = collections.namedtuple('Student', ['name', 'age', 'DOB']) # Adding values S = Student('Nandini', '19', '2541997') # initializing iterable li = ['Manjeet', '19', '411997'] di = {'name': 'Nikhil', 'age': 19, 'DOB': '1391997'} # using _make() to return namedtuple() print('The namedtuple instance using iterable is : ') print(Student._make(li))>

Вихід
The namedtuple instance using iterable is : Student(name='Manjeet', age='19', DOB='411997')>

Операція перетворення за допомогою _asdict()

Ця функція повертає в OrderedDict() як побудовано з відображених значень namedtuple(). У цьому прикладі ми використовуємо _asdict() для перетворення списку введення в екземпляр namedtuple.

Python3
import collections # Declaring namedtuple() Student = collections.namedtuple('Student', ['name', 'age', 'DOB']) # Adding values S = Student('Nandini', '19', '2541997') # initializing iterable li = ['Manjeet', '19', '411997'] # initializing dict di = {'name': 'Nikhil', 'age': 19, 'DOB': '1391997'} # using _asdict() to return an OrderedDict() print('The OrderedDict instance using namedtuple is : ') print(S._asdict())>

Вихід
The OrderedDict instance using namedtuple is : OrderedDict([('name', 'Nandini'), ('age', '19'), ('DOB', '2541997')])>

Використання оператора ** (подвійна зірочка).

Ця функція використовується для перетворення словника в namedtuple(). У цьому прикладі ми використовуємо **, щоб перетворити вхідний список у namedtuple.

Python3
import collections # Declaring namedtuple() Student = collections.namedtuple('Student', ['name', 'age', 'DOB']) # Adding values S = Student('Nandini', '19', '2541997') # initializing iterable li = ['Manjeet', '19', '411997'] # initializing dict di = {'name': 'Nikhil', 'age': 19, 'DOB': '1391997'} # using ** operator to return namedtuple from dictionary print('The namedtuple instance from dict is : ') print(Student(**di))>

Вихід
The namedtuple instance from dict is : Student(name='Nikhil', age=19, DOB='1391997')>

Додаткові операції

Є деякі додаткові операції, які передбачені в Python для NamedTuples:

  • _поля
  • _replace()
  • __новий__()
  • __getnewargs__()

_поля

Цей атрибут даних використовується для отримання всі назви ключів оголошеного простору імен. У цьому прикладі ми використовуємо _fields, щоб отримати всі імена ключів оголошеного простору імен.

спробуйте зловити java
Python3
import collections Student = collections.namedtuple('Student', ['name', 'age', 'DOB']) # Adding values S = Student('Nandini', '19', '2541997') # using _fields to display all the keynames of namedtuple() print('All the fields of students are : ') print(S._fields)>

Вихід
All the fields of students are : ('name', 'age', 'DOB')>

_replace()

_replace() схожий на str.replace(), але націлений на іменовані поля (не змінює початкові значення). У цьому прикладі ми використовуємо _replace(), щоб замінити ім’я з Nandini на Manjeet.

Python3
import collections # Declaring namedtuple() Student = collections.namedtuple('Student', ['name', 'age', 'DOB']) # Adding values S = Student('Nandini', '19', '2541997') # ._replace returns a new namedtuple,  # it does not modify the original print('returns a new namedtuple : ') print(S._replace(name='Manjeet'))>

Вихід
returns a new namedtuple : Student(name='Manjeet', age='19', DOB='2541997')>

__новий__()

Ця функція повертає новий екземпляр класу Student, беручи значення, які ми хочемо призначити ключам у названому кортежі. У цьому прикладі ми використовуємо __new__(), щоб повернути новий екземпляр класу Student.

Python3
import collections # Declaring namedtuple() Student = collections.namedtuple('Student', ['name', 'age', 'DOB']) # Adding values S = Student('Nandini', '19', '2541997') # Student.__new__ returns a new instance of Student(name,age,DOB) print(Student.__new__(Student,'Himesh','19','26082003'))>

Вихід
Student(name='Himesh', age='19', DOB='26082003')>

__getnewargs__()

Ця функція повертає названий кортеж як звичайний кортеж. У цьому прикладі ми робимо те саме, використовуючи __getnewargs__().

Python3
import collections # Declaring namedtuple() Student = collections.namedtuple('Student', ['name', 'age', 'DOB']) # Adding values S = Student('Nandini', '19', '2541997') H=Student('Himesh','19','26082003') # .__getnewargs__ returns the named tuple as a plain tuple print(H.__getnewargs__())>

Вихід
('Himesh', '19', '26082003')>