Namedtuple en Python
Python admet un tipus de diccionari de contenidors anomenat ' namedtuple() 'present al mòdul' col·leccions '. En aquest article veurem com crear un NameTuple i operacions sobre NamedTuple.
Què és NamedTuple a Python?
En Python NamedTuple està present dins de mòdul de col·leccions . Proporciona una manera de crear estructures de dades senzilles i lleugeres similars a una classe, però sense la sobrecàrrega de definir una classe completa. Igual que els diccionaris, contenen claus que tenen un valor determinat. Al contrari, admet tant l'accés des de clau-valor com la iteració de la funcionalitat que diccionaris mancança.
Sintaxi de Python NamedTuple
namedtuple(typename field_names)
- typename - El nom del namedtuple.
- field_names: la llista d'atributs emmagatzemats a namedtuple.
Exemple: La implementació del codi de NamedTuple es mostra a 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 )
Sortida
The Student age using index is : 19 The Student name using keyname is : Nandini
Operacions a NamedTuple
A continuació es mostren les operacions següents que es poden fer utilitzant namedtuple():
- Creeu un NameTuple
- Operacions d'accés
- Operacions de conversió
- Operacions addicionals
Creeu un NameTuple a Python
Això crea una nova classe namedtuple utilitzant la funció namedtuple() de la col·leccions mòdul. El primer argument és el nom de la nova classe i el segon argument és una llista de noms de camp.
Python from collections import namedtuple Point = namedtuple ( 'Point' [ 'x' 'y' ]) p = Point ( x = 1 y = 2 ) print ( p . x p . y )
Sortida
1 2
Operacions d'accés
Namedtuples a Python ofereixen maneres convenients d'accedir als seus camps. A continuació es mostren algunes operacions d'accés proporcionades a Python per a NamedTuple:
- Accés per índex
- Accés per nom clau
- Accediu amb getattr()
Accés per índex
Els valors d'atribut de namedtuple() estan ordenats i es pot accedir mitjançant el número d'índex, a diferència dels diccionaris que no són accessibles per índex. En aquest exemple estem accedint a l'estudiant mitjançant l'índex.
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 ])
Sortida
The Student age using index is : 19
Accés per nom clau
També es permet l'accés per nom de clau com en els diccionaris. En aquest exemple estem utilitzant keyname per accedir al nom de l'estudiant.
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 )
Sortida
The Student name using keyname is : Nandini
Accediu amb getattr()
Aquesta és una altra manera d'accedir al valor donant namedtuple i valor clau com a argument. En aquest exemple, estem utilitzant getattr() per accedir a l'identificador de l'estudiant al namedtuple donat.
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' ))
Sortida
The Student DOB using getattr() is : 2541997
Operacions de conversió
Namedtuples ofereix unes quantes operacions de conversió útils per treballar amb altres tipus de dades Python . A continuació es mostren les següents operacions de conversió que es proporcionen per a namedtuples a Python:
- Utilitzant _make()
- Utilitzant _asdict()
- S'utilitza l'operador ** (doble estrella).
Conversió mitjançant _make()
Aquesta funció s'utilitza per retornar a namedtuple() de l'iterable passat com a argument. En aquest exemple estem utilitzant _make() per convertir la llista 'li' en 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 ))
Sortida
The namedtuple instance using iterable is : Student(name='Manjeet' age='19' DOB='411997')
Operació de conversió utilitzant _asdict()
Aquesta funció torna el OrderedDict() tal com es construeix a partir dels valors assignats de namedtuple(). En aquest exemple estem utilitzant _asdict() per convertir la llista d'entrada en instància 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 ())
Sortida
The OrderedDict instance using namedtuple is : OrderedDict([('name' 'Nandini') ('age' '19') ('DOB' '2541997')]) S'utilitza l'operador '**' (doble estrella).
Aquesta funció s'utilitza per convertir un diccionari en namedtuple(). En aquest exemple estem utilitzant '**' per convertir la llista d'entrada en 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 ))
Sortida
The namedtuple instance from dict is : Student(name='Nikhil' age=19 DOB='1391997')
Operacions addicionals
Hi ha algunes operacions addicionals que es proporcionen a Python per a NamedTples:
- _camps
- _substituir()
- __nou__()
- __getnewargs__()
_camps
Aquest atribut de dades s'utilitza per obtenir tots els noms clau de l'espai de noms declarat. En aquest exemple estem utilitzant _fields per obtenir tots els noms clau de l'espai de noms declarats.
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 )
Sortida
All the fields of students are : ('name' 'age' 'DOB') _substituir()
_replace() és com str.replace() però apunta a camps anomenats (no modifica els valors originals). En aquest exemple estem utilitzant _replace() per substituir un nom de "Nandini" a "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' ))
Sortida
returns a new namedtuple : Student(name='Manjeet' age='19' DOB='2541997')
__nou__()
Aquesta funció retorna una nova instància de la classe Student prenent els valors que volem assignar a les claus de la tupla anomenada. En aquest exemple estem utilitzant __new__() per retornar una nova instància de la classe 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' ))
Sortida
Student(name='Himesh' age='19' DOB='26082003')
__getnewargs__()
Aquesta funció retorna la tupla anomenada com una tupla normal. En aquest exemple estem fent el mateix utilitzant __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__ ())
Sortida
('Himesh' '19' '26082003')
- Mutabilitat : les instàncies d'una classe poden ser mutables o immutables mentre
namedtupleels casos són immutables.- Mètodes : Les classes poden contenir mètodes (funcions) mentre
namedtupleprincipalment proporciona una manera d'emmagatzemar dades amb camps amb nom.- Herència : Les classes admeten l'herència permetent la creació de jerarquies complexes mentre que
namedtupleno admet l'herència.
Quina diferència hi ha entre tiped dict i namedtuple?
- Comprovació de tipus :
TypedDict(de latypingmodule) proporciona consells de tipus per als diccionaris amb parells clau-valor específics útils per a la verificació de tipus.namedtupleno proporciona indicacions de tipus.- Mutabilitat :
TypedDictles instàncies són mutables i permeten canvis als valors whilenamedtupleels casos són immutables.- Estructura :
TypedDicts'utilitza per definir l'estructura dels diccionaris amb tipus específics per a cada clau mentre quenamedtupleproporciona camps amb nom per a dades semblants a tupla.