Namedtuple Python

Python atbalsta konteinera vārdnīcas veidu ar nosaukumu " nosaukts divkāršs() ' atrodas modulī' kolekcijas '. Šajā rakstā mēs redzēsim, kā izveidot NameTuple un darbības ar NamedTuple.

Kas ir NamedTuple Python?

In Python NamedTuple atrodas iekšpusē kolekciju modulis . Tas nodrošina veidu, kā izveidot vienkāršas vieglas datu struktūras, kas līdzīgas klasei, bet bez papildu izdevumiem, kas saistīti ar pilnas klases definēšanu. Tāpat kā vārdnīcās, tajās ir atslēgas, kas ir sajauktas līdz noteiktai vērtībai. Gluži pretēji, tas atbalsta gan piekļuvi no atslēgas vērtības, gan funkcionalitātes iterāciju vārdnīcas trūkums.

Python NamedTuple sintakse

namedtuple(tipa nosaukuma lauku_nosaukumi)

  • typename — namedtuple nosaukums.
  • field_names — atribūtu saraksts, kas tiek glabāts namedtuple.

Piemērs: NamedTuple koda ieviešana ir parādīta 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  )   

Izvade
The Student age using index is : 19 The Student name using keyname is : Nandini  

Darbības ar NamedTuple

Tālāk ir norādītas šādas darbības, kuras var veikt, izmantojot namedtuple ():

  • Izveidojiet NameTuple
  • Piekļuves operācijas
  • Konversijas operācijas
  • Papildu operācijas

Izveidojiet NameTuple programmā Python

Tādējādi tiek izveidota jauna namedtuple klase, izmantojot funkciju namedtuple() no kolekcijas modulis. Pirmais arguments ir jaunās klases nosaukums, bet otrais arguments ir lauku nosaukumu saraksts.

Python
   from   collections   import   namedtuple   Point   =   namedtuple  (  'Point'     [  'x'     'y'  ])   p   =   Point  (  x  =  1     y  =  2  )   print  (  p  .  x     p  .  y  )   

Izvade
1 2  

Piekļuves operācijas

Namedtuples programmā Python nodrošina ērtus veidus, kā piekļūt saviem laukiem. Tālāk ir norādītas dažas piekļuves darbības, kas nodrošinātas Python programmā NamedTuple:

  • Piekļuve pēc indeksa
  • Piekļuve pēc atslēgas nosaukuma
  • Piekļuve, izmantojot getattr()

Piekļuve pēc indeksa

Namedtuple() atribūtu vērtības ir sakārtotas, un tām var piekļūt, izmantojot indeksa numuru, atšķirībā no vārdnīcām, kuras nav pieejamas, izmantojot indeksu. Šajā piemērā mēs piekļūstam skolēna datiem, izmantojot indeksu.

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  ])   

Izvade
The Student age using index is : 19  

Piekļuve pēc atslēgas nosaukuma

Tāpat kā vārdnīcās, ir atļauta piekļuve arī pēc atslēgas nosaukuma. Šajā piemērā mēs izmantojam atslēgas nosaukumu, lai piekļūtu skolēna vārdam.

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  )   

Izvade
The Student name using keyname is : Nandini  

Piekļuve, izmantojot getattr()

Šis ir vēl viens veids, kā piekļūt vērtībai, kā argumentu norādot namedtuple un atslēgas vērtību. Šajā piemērā mēs izmantojam getattr (), lai piekļūtu studenta ID dotajā nosaukumā.

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'  ))   

Izvade
The Student DOB using getattr() is : 2541997  

Konversijas operācijas

Namedtuples nodrošina dažas noderīgas konvertēšanas darbības, lai strādātu ar citiem datu veidiem Python . Tālāk ir norādītas šādas konvertēšanas darbības, kas ir paredzētas Python namedtuples:

  • Izmantojot _make()
  • Izmantojot _asdict()
  • Izmantojot operatoru ** (dubultzvaigzne).

Reklāmguvums, izmantojot _make()

Šo funkciju izmanto, lai atgrieztu a namedtuple() no iterable pieņemts kā arguments. Šajā piemērā mēs izmantojam _make(), lai sarakstu "li" pārvērstu par 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  ))   

Izvade
The namedtuple instance using iterable is : Student(name='Manjeet' age='19' DOB='411997')  

Konversijas darbība, izmantojot _asdict()

Šī funkcija atgriežas uz OrderedDict() kā izveidots no namedtuple() kartētajām vērtībām. Šajā piemērā mēs izmantojam _asdict(), lai pārvērstu ievades sarakstu par nosaukumiem dubultā instancē.

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  ())   

Izvade
The OrderedDict instance using namedtuple is : OrderedDict([('name' 'Nandini') ('age' '19') ('DOB' '2541997')])  

Izmantojot operatoru “**” (dubultzvaigzne).

Šo funkciju izmanto, lai pārvērstu vārdnīcu par namedtuple(). Šajā piemērā mēs izmantojam '**', lai pārveidotu ievades sarakstu par 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  ))   

Izvade
The namedtuple instance from dict is : Student(name='Nikhil' age=19 DOB='1391997')  

Papildu operācijas 

Ir paredzētas dažas papildu darbības Python NamedTuples:

  • _lauki
  • _aizvietot()
  • __jauns__()
  • __getnewargs__()

_lauki

Šis datu atribūts tiek izmantots, lai iegūtu visi atslēgas vārdi no deklarētās nosaukumvietas. Šajā piemērā mēs izmantojam _fields, lai iegūtu visus deklarētos nosaukumvietas atslēgu nosaukumus.

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  )   

Izvade
All the fields of students are : ('name' 'age' 'DOB')  

_aizvietot()

_replace() ir līdzīgs str.replace(), bet mērķēts uz laukiem ar nosaukumu (negroza sākotnējās vērtības). Šajā piemērā mēs izmantojam _replace(), lai aizstātu nosaukumu no 'Nandini' uz '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'  ))   

Izvade
returns a new namedtuple : Student(name='Manjeet' age='19' DOB='2541997')  

__jauns__()

Šī funkcija atgriež jaunu studentu klases gadījumu, ņemot vērtības, kuras vēlamies piešķirt taustiņiem nosauktajā kortežā. Šajā piemērā mēs izmantojam __new__(), lai atgrieztu jaunu studentu klases gadījumu.

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'  ))   

Izvade
Student(name='Himesh' age='19' DOB='26082003')  

__getnewargs__()

Šī funkcija atgriež nosaukto virkni kā vienkāršu virkni. Šajā piemērā mēs darām to pašu, izmantojot __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__  ())   

Izvade
('Himesh' '19' '26082003')  
  1. Mainīgums : klases gadījumi var būt mainīgi vai nemainīgi namedtuple gadījumi ir nemainīgi.
  2. Metodes : klasēs var būt metodes (funkcijas), kamēr namedtuple galvenokārt nodrošina veidu, kā uzglabāt datus ar nosauktiem laukiem.
  3. Mantojums : klases atbalsta pārmantošanu, ļaujot izveidot sarežģītas hierarhijas, turpretim namedtuple neatbalsta mantojumu.

Kāda ir atšķirība starp drukātu dict un namedtuple?

  1. Tipa pārbaude : TypedDict (no typing modulis) nodrošina tipa padomus vārdnīcām ar konkrētiem atslēgu-vērtību pāriem, kas ir noderīgi tipa pārbaudei. namedtuple nesniedz tipa mājienus.
  2. Mainīgums : TypedDict gadījumi ir maināmi, ļaujot mainīt vērtības, kamēr namedtuple gadījumi ir nemainīgi.
  3. Struktūra : TypedDict tiek izmantots, lai definētu vārdnīcu struktūru ar konkrētiem veidiem katrai atslēgai, turpretim namedtuple nodrošina nosauktus laukus kortežveidīgiem datiem.