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')  
  1. Mutabilità : Le istanze di una classe possono essere mutabili o immutabili while namedtuple le istanze sono immutabili.
  2. Metodi : Le classi possono contenere metodi (funzioni) while namedtuple fornisce principalmente un modo per archiviare dati con campi denominati.
  3. Eredità : Le classi supportano l'ereditarietà consentendo la creazione di gerarchie complesse mentre namedtuple non supporta l'ereditarietà.

Qual è la differenza tra dict tipizzato e nametuple?

  1. Tipo Controllo : TypedDict (da typing module) fornisce suggerimenti sul tipo per i dizionari con coppie chiave-valore specifiche utili per il controllo del tipo. namedtuple non fornisce suggerimenti sul tipo.
  2. Mutabilità : TypedDict le istanze sono mutabili consentendo modifiche ai valori while namedtuple le istanze sono immutabili.
  3. Struttura : TypedDict viene utilizzato per definire la struttura dei dizionari con tipi specifici per ciascuna chiave mentre namedtuple fornisce campi con nome per dati simili a tuple.