Namedtuple v Pythone

Python podporuje typ kontajnerového slovníka s názvom ' namedtuple() ' prítomný v module ' zbierky '. V tomto článku sa pozrieme na to, ako vytvoriť NameTuple a operácie na NamedTuple.

Čo je NamedTuple v Pythone?

In Python NamedTuple je prítomný vo vnútri modul zbierok . Poskytuje spôsob, ako vytvoriť jednoduché ľahké dátové štruktúry podobné triede, ale bez réžie definovania celej triedy. Podobne ako slovníky obsahujú kľúče, ktoré sú hašované na konkrétnu hodnotu. Naopak, podporuje prístup z páru kľúč-hodnota a iteráciu funkcií, ktoré slovníkov nedostatok.

Syntax NamedTuple Pythonu

Namedtuple (názov typu field_names)

  • typename – názov namenej množiny.
  • field_names - Zoznam atribútov uložených v Namedtple.

Príklad: Implementácia kódu NamedTuple je znázornená v 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  )   

Výstup
The Student age using index is : 19 The Student name using keyname is : Nandini  

Operácie na NamedTuple

Nižšie sú uvedené nasledujúce operácie, ktoré možno vykonať pomocou Namedtuple():

  • Vytvorte NameTuple
  • Operácie prístupu
  • Konverzné operácie
  • Ďalšie operácie

Vytvorte NameTuple v Pythone

Toto vytvorí novú triedu namedtuple pomocou funkcie namedtuple() z zbierky modul. Prvý argument je názov novej triedy a druhý argument je zoznam názvov polí.

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

Výstup
1 2  

Operácie prístupu

Namedtuple v Pythone poskytujú pohodlné spôsoby prístupu k ich poliam. Nižšie sú uvedené niektoré operácie prístupu poskytované v Pythone pre NamedTuple:

  • Prístup podľa indexu
  • Prístup podľa názvu kľúča
  • Prístup pomocou getattr()

Prístup podľa indexu

Hodnoty atribútov namedtuple() sú usporiadané a možno k nim pristupovať pomocou čísla indexu na rozdiel od slovníkov, ktoré nie sú prístupné indexom. V tomto príklade pristupujeme k študentom pomocou indexu.

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

Výstup
The Student age using index is : 19  

Prístup podľa názvu kľúča

Prístup podľa názvu kľúča je tiež povolený ako v slovníkoch. V tomto príklade používame keyname na prístup k menu študenta.

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  )   

Výstup
The Student name using keyname is : Nandini  

Prístup pomocou getattr()

Toto je ďalší spôsob, ako získať prístup k hodnote zadaním nametuple a kľúčovej hodnoty ako argumentu. V tomto príklade používame getattr() na prístup k ID študenta v danom nametuple.

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

Výstup
The Student DOB using getattr() is : 2541997  

Konverzné operácie

Namedtuples poskytujú niekoľko užitočných operácií konverzie na prácu s inými typmi údajov Python . Nižšie sú uvedené nasledujúce konverzné operácie, ktoré sú k dispozícii pre Namedtuples v Pythone:

  • Použitie _make()
  • Použitie _asdict()
  • Použitie operátora ** (dvojitá hviezdička).

Konverzia pomocou _make()

Táto funkcia sa používa na vrátenie a Namedtuple() z iterable prešiel ako argument. V tomto príklade používame _make() na konverziu zoznamu 'li' na 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  ))   

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

Operácia konverzie pomocou _asdict()

Táto funkcia sa vráti na OrderedDict() ako je skonštruované z mapovaných hodnôt namedtuple(). V tomto príklade používame _asdict() na konverziu vstupného zoznamu na menovanú inštanciu.

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

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

Použitie operátora „**“ (dvojitá hviezdička).

Táto funkcia sa používa na konverziu slovníka na namedtuple(). V tomto príklade používame '**' na konverziu vstupného zoznamu na 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  ))   

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

Ďalšie operácie 

Existuje niekoľko ďalších operácií, ktoré sú k dispozícii v Python pre NamedTuples:

  • _fields
  • _replace()
  • __new__()
  • __getnewargs__()

_fields

Tento atribút údajov sa používa na získanie všetky kľúčové mená deklarovaného menného priestoru. V tomto príklade používame _fields na získanie všetkých názvov kľúčov deklarovaného priestoru názvov.

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  )   

Výstup
All the fields of students are : ('name' 'age' 'DOB')  

_replace()

_replace() je ako str.replace(), ale zameriava sa na pomenované polia (neupravuje pôvodné hodnoty). V tomto príklade používame _replace() na nahradenie mena z 'Nandini' na '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'  ))   

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

__new__()

Táto funkcia vráti novú inštanciu triedy Študent prebratím hodnôt, ktoré chceme priradiť kľúčom v pomenovanej n-tici. V tomto príklade používame __new__() na vrátenie novej inštancie triedy Študent.

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

Výstup
Student(name='Himesh' age='19' DOB='26082003')  

__getnewargs__()

Táto funkcia vráti pomenovanú n-ticu ako obyčajnú n-ticu. V tomto príklade robíme to isté pomocou __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__  ())   

Výstup
('Himesh' '19' '26082003')  
  1. Premenlivosť : Inštancie triedy môžu byť meniteľné alebo nemenné namedtuple inštancie sú nemenné.
  2. Metódy : Triedy môžu obsahovať metódy (funkcie) while namedtuple poskytuje predovšetkým spôsob ukladania údajov s pomenovanými poľami.
  3. Dedičnosť : Triedy podporujú dedičnosť umožňujúcu vytváranie zložitých hierarchií namedtuple nepodporuje dedičstvo.

Aký je rozdiel medzi zadaným diktátom a nametouple?

  1. Kontrola typu : TypedDict (z typing modul) poskytuje tipy na typ pre slovníky so špecifickými pármi kľúč – hodnota, ktoré sú užitočné pri kontrole typu. namedtuple neposkytuje typové rady.
  2. Premenlivosť : TypedDict inštancie sú meniteľné, čo umožňuje zmeny hodnôt while namedtuple inštancie sú nemenné.
  3. Štruktúra : TypedDict sa používa na definovanie štruktúry slovníkov so špecifickými typmi pre každý kľúč, zatiaľ čo namedtuple poskytuje pomenované polia pre údaje podobné n-tici.