Namedtuple in Python
Python supporta un tipo di dizionario contenitore chiamato ' nometupla() 'presente nel modulo' collezioni '. In questo articolo vedremo come Creare una NameTuple e le operazioni su NamedTuple.
Cos'è NamedTuple in Python?
In Pitone NamedTuple è presente all'interno del file modulo collezioni . Fornisce un modo per creare strutture dati semplici e leggere simili a una classe ma senza il sovraccarico della definizione di una classe completa. Come i dizionari, contengono chiavi con hash su un valore particolare. Al contrario, supporta sia l'accesso dal valore-chiave sia l'iterazione della funzionalità that dizionari mancanza.
Sintassi Python NamedTuple
denominatatuple(nometipo nomi_campo)
- typename - Il nome della tupla denominata.
- field_names - L'elenco degli attributi memorizzati nella denominata tuple.
Esempio: L'implementazione del codice di NamedTuple è mostrata in Pitone .
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 )
Produzione
The Student age using index is : 19 The Student name using keyname is : Nandini
Operazioni su NamedTuple
Di seguito sono riportate le seguenti operazioni che possono essere eseguite utilizzando nametuple():
- Crea una NameTuple
- Accedi alle operazioni
- Operazioni di conversione
- Operazioni aggiuntive
Crea una NameTuple in Python
Questo crea una nuova classe denominata tuple utilizzando la funzione denominata tuple() dal file collezioni modulo. Il primo argomento è il nome della nuova classe e il secondo argomento è un elenco di nomi di campi.
Python from collections import namedtuple Point = namedtuple ( 'Point' [ 'x' 'y' ]) p = Point ( x = 1 y = 2 ) print ( p . x p . y )
Produzione
1 2
Accedi alle operazioni
Le namedtuple in Python forniscono modi convenienti per accedere ai propri campi. Di seguito sono riportate alcune operazioni di accesso fornite in Python per NamedTuple:
- Accesso tramite indice
- Accesso tramite nome chiave
- Accedi utilizzando getattr()
Accesso tramite indice
I valori degli attributi di nametuple() sono ordinati ed è possibile accedervi utilizzando il numero di indice a differenza dei dizionari che non sono accessibili tramite indice. In questo esempio stiamo accedendo a quello dello studente utilizzando il file index.
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 ])
Produzione
The Student age using index is : 19
Accesso tramite nome chiave
È consentito anche l'accesso tramite nome chiave come nei dizionari. In questo esempio utilizziamo il nome chiave per accedere al nome dello studente.
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 )
Produzione
The Student name using keyname is : Nandini
Accedi utilizzando getattr()
Questo è ancora un altro modo per accedere al valore fornendo nametuple e key value come argomento. In questo esempio stiamo usando getattr() per accedere all'id dello studente nella nametuple specificata.
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' ))
Produzione
The Student DOB using getattr() is : 2541997
Operazioni di conversione
Namedtuple fornisce alcune utili operazioni di conversione per lavorare con altri tipi di dati Pitone . Di seguito sono riportate le seguenti operazioni di conversione fornite per nametuple in Python:
- Utilizzando _make()
- Utilizzando _asdict()
- Utilizzando l'operatore ** (doppia stella).
Conversione utilizzando _make()
Questa funzione viene utilizzata per restituire a nametuple() dall'iterabile passato come argomento. In questo esempio stiamo usando _make() per convertire la lista 'li' in nametuple.
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 ))
Produzione
The namedtuple instance using iterable is : Student(name='Manjeet' age='19' DOB='411997')
Operazione di conversione utilizzando _asdict()
Questa funzione ritorna IL OrdinatoDict() come costruito dai valori mappati di nametuple(). In questo esempio stiamo usando _asdict() per convertire l'elenco di input nell'istanza di nametuple.
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 ())
Produzione
The OrderedDict instance using namedtuple is : OrderedDict([('name' 'Nandini') ('age' '19') ('DOB' '2541997')]) Utilizzo dell'operatore '**' (doppia stella).
Questa funzione viene utilizzata per convertire un dizionario nel nametuple(). In questo esempio stiamo usando '**' per convertire l'elenco di input in nametuple.
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 ))
Produzione
The namedtuple instance from dict is : Student(name='Nikhil' age=19 DOB='1391997')
Operazioni aggiuntive
Ci sono alcune operazioni aggiuntive fornite in Pitone per NamedTuple:
- _campi
- _sostituire()
- __nuovo__()
- __getnewargs__()
_campi
Questo attributo di dati viene utilizzato per ottenere tutti i nomi chiave dello spazio dei nomi dichiarato. In questo esempio stiamo utilizzando _fields per ottenere tutti i nomi chiave dello spazio dei nomi dichiarati.
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 )
Produzione
All the fields of students are : ('name' 'age' 'DOB') _sostituire()
_replace() è come str.replace() ma prende di mira i campi denominati (non modifica i valori originali). In questo esempio stiamo usando _replace() per sostituire un nome da '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' ))
Produzione
returns a new namedtuple : Student(name='Manjeet' age='19' DOB='2541997')
__nuovo__()
Questa funzione restituisce una nuova istanza della classe Studente prendendo i valori che vogliamo assegnare alle chiavi nella tupla denominata. In questo esempio stiamo utilizzando __new__() per restituire una nuova istanza della 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' ))
Produzione
Student(name='Himesh' age='19' DOB='26082003')
__getnewargs__()
Questa funzione restituisce la tupla denominata come una tupla semplice. In questo esempio stiamo facendo lo stesso usando __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__ ())
Produzione
('Himesh' '19' '26082003')
- Mutabilità : Le istanze di una classe possono essere mutabili o immutabili while
namedtuplele istanze sono immutabili.- Metodi : Le classi possono contenere metodi (funzioni) while
namedtuplefornisce principalmente un modo per archiviare dati con campi denominati.- Eredità : Le classi supportano l'ereditarietà consentendo la creazione di gerarchie complesse mentre
namedtuplenon supporta l'ereditarietà.
Qual è la differenza tra dict tipizzato e nametuple?
- Tipo Controllo :
TypedDict(datypingmodule) fornisce suggerimenti sul tipo per i dizionari con coppie chiave-valore specifiche utili per il controllo del tipo.namedtuplenon fornisce suggerimenti sul tipo.- Mutabilità :
TypedDictle istanze sono mutabili consentendo modifiche ai valori whilenamedtuplele istanze sono immutabili.- Struttura :
TypedDictviene utilizzato per definire la struttura dei dizionari con tipi specifici per ciascuna chiave mentrenamedtuplefornisce campi con nome per dati simili a tuple.