Namedtuple у Python

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

Що таке NamedTuple у Python?

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

Синтаксис Python NamedTuple

namedtuple(typename field_names)

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

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

Python
   # 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() з колекції модуль. Перший аргумент — це ім’я нового класу, а другий — список імен полів.

Python
   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() упорядковані, і до них можна отримати доступ за допомогою номера індексу, на відміну від словників, які не доступні за індексом. У цьому прикладі ми отримуємо доступ до студента за допомогою індексу.

Python
   # 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 для доступу до імені студента.

Python
   # 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.

Python
   # 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:

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

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

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

Python
   # 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.

Python
   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.

Python
   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, щоб отримати всі імена ключів оголошеного простору імен.

Python
   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".

Python
   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.

Python
   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(nameageDOB)   print  (  Student  .  __new__  (  Student    'Himesh'    '19'    '26082003'  ))   

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

__getnewargs__()

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

Python
   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')  
  1. Мінливість : екземпляри класу можуть бути змінними або незмінними namedtuple екземпляри незмінні.
  2. методи : Класи можуть містити методи (функції) while namedtuple насамперед забезпечує спосіб зберігання даних з іменованими полями.
  3. Спадщина : класи підтримують успадкування, що дозволяє створювати складні ієрархії, тоді як namedtuple не підтримує успадкування.

Яка різниця між typed dict і namedtuple?

  1. Перевірка типу : TypedDict (від typing модуль) надає підказки типу для словників із конкретними парами ключ-значення, корисними для перевірки типу. namedtuple не надає підказок типу.
  2. Мінливість : TypedDict екземпляри є змінними, що дозволяє змінювати значення while namedtuple екземпляри незмінні.
  3. Структура : TypedDict використовується для визначення структури словників із певними типами для кожного ключа, тоді як namedtuple забезпечує іменовані поля для кортежних даних.

Вам Може Сподобатися