Python acceptă un tip de dicționar de container numit namedtuple() prezente în modul colecții . În acest articol, vom vedea cum să creăm un NameTuple și operațiuni pe NamedTuple.
Ce este NamedTuple în Python?
În Piton , NamedTuple este prezent în interiorul modul colecții . Oferă o modalitate de a crea structuri de date simple, ușoare, similare unei clase, dar fără suprasolicitarea definirii unei clase complete. La fel ca și dicționarele, ele conțin chei care au o anumită valoare. Dimpotrivă, acceptă atât accesul de la cheie-valoare, cât și de la iterație, funcționalitatea care dicționare lipsa.
Sintaxa Python NamedTuple
namedtuple(nume tip, nume_câmpuri)
- typename – Numele namedtuple-ului.
- field_names – Lista de atribute stocate în namedtuple.
Exemplu: Implementarea codului NamedTuple este prezentată în Piton .
cât cântărește kat timpfPython3
# 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)> Ieșire
The Student age using index is : 19 The Student name using keyname is : Nandini>
Operațiuni pe NamedTuple
Mai jos sunt următoarele operațiuni care se pot face folosind namedtuple():
- Creați un NameTuple
- Operațiuni de acces
- Operațiuni de conversie
- Operațiuni suplimentare
Creați un NameTuple în Python
Aceasta creează o nouă clasă namedtuple folosind funcția namedtuple() din colecții modul. Primul argument este numele noii clase, iar al doilea argument este o listă de nume de câmpuri.
vârsta dharmendraPython3
from collections import namedtuple Point = namedtuple('Point', ['x', 'y']) p = Point(x=1, y=2) print(p.x, p.y)> Ieșire
1 2>
Operațiuni de acces
Namedtuples în Python oferă modalități convenabile de a accesa câmpurile lor. Mai jos sunt câteva operațiuni de acces furnizate în Python pentru NamedTuple:
- Acces prin index
- Acces prin nume cheie
- Accesați folosind getattr()
Acces prin index
Valorile atributelor namedtuple() sunt ordonate și pot fi accesate folosind numărul de index, spre deosebire de dicționarele care nu sunt accesibile prin index. În acest exemplu, accesăm cele ale elevului folosind index.
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])> Ieșire
The Student age using index is : 19>
Acces prin nume cheie
Accesul după numele cheii este permis și ca în dicționare. În acest exemplu, folosim numele cheie pentru a accesa numele studentului.
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)> Ieșire
The Student name using keyname is : Nandini>
Accesați folosind getattr()
Aceasta este încă o modalitate de a accesa valoarea dând namedtuple și key value ca argument. În acest exemplu, folosim getattr() pentru a accesa id-ul studentului în namedtuple dat.
tuplu python sortatPython3
# 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'))> Ieșire
The Student DOB using getattr() is : 2541997>
Operațiuni de conversie
Namedtuples oferă câteva operațiuni de conversie utile pentru a lucra cu alte tipuri de date Piton . Mai jos sunt următoarele operațiuni de conversie care sunt furnizate pentru namedtuples în Python:
- Folosind _make()
- Folosind _asdict()
- Folosind operatorul ** (stea dublă).
Conversie folosind _make()
Această funcție este folosită pentru a returna a namedtuple() din iterabil trecut drept argument. În acest exemplu, folosim _make() pentru a converti lista li în 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))> Ieșire
The namedtuple instance using iterable is : Student(name='Manjeet', age='19', DOB='411997')>
Operație de conversie folosind _asdict()
Această funcție revine cel OrderedDict() așa cum este construit din valorile mapate ale namedtuple(). În acest exemplu, folosim _asdict() pentru a converti lista de intrare în instanță 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())> Ieșire
The OrderedDict instance using namedtuple is : OrderedDict([('name', 'Nandini'), ('age', '19'), ('DOB', '2541997')])> Folosind operatorul ** (stea dublă).
Această funcție este folosită pentru a converti un dicționar în namedtuple(). În acest exemplu, folosim ** pentru a converti lista de intrare în 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))> Ieșire
The namedtuple instance from dict is : Student(name='Nikhil', age=19, DOB='1391997')>
Operațiuni suplimentare
Există câteva operațiuni suplimentare care sunt furnizate în Piton pentru NamedTuples:
- _câmpuri
- _a inlocui()
- __nou__()
- __getnewargs__()
_câmpuri
Acest atribut de date este folosit pentru a obține toate cheile a spațiului de nume declarat. În acest exemplu, folosim _fields pentru a obține toate numele cheie ale spațiului de nume declarate.
comandă atingere în linuxPython3
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)> Ieșire
All the fields of students are : ('name', 'age', 'DOB')> _a inlocui()
_replace() este ca str.replace() dar vizează câmpuri numite (nu modifică valorile originale). În acest exemplu, folosim _replace() pentru a înlocui un nume de la Nandini la 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'))> Ieșire
returns a new namedtuple : Student(name='Manjeet', age='19', DOB='2541997')>
__nou__()
Această funcție returnează o nouă instanță a clasei Student, luând valorile pe care dorim să le atribuim cheilor din tuplu numit. În acest exemplu, folosim __new__() pentru a returna o nouă instanță a clasei 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'))> Ieșire
Student(name='Himesh', age='19', DOB='26082003')>
__getnewargs__()
Această funcție returnează tuplu-ul numit ca un tuplu simplu. În acest exemplu, facem același lucru folosind __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__())> Ieșire
('Himesh', '19', '26082003')>