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