logo

Namedtuple v Pythone

Python podporuje typ kontajnerového slovníka tzv namedtuple() prítomný v module zbierky . V tomto článku uvidíme, 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 aj iteráciu, teda funkciu, ktorá slovníkov nedostatok.



Syntax NamedTuple Pythonu

Namedtuple(typename, 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 .

hlavný program v jave
Python3
# 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ýkon
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í.

filmová herečka kajal
Python3
from collections import namedtuple Point = namedtuple('Point', ['x', 'y']) p = Point(x=1, y=2) print(p.x, p.y)>

Výkon
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.



Python3
# 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ýkon
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.

pytón ťavej
Python3
# 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ýkon
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.

Python3
# 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ýkon
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.

Python3
# 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ýkon
The namedtuple instance using iterable is : Student(name='Manjeet', age='19', DOB='411997')>

Operácia konverzie pomocou _asdict()

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

Python3
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ýkon
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.

baran herec
Python3
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ýkon
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()
  • __Nový__()
  • __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.

Python3
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ýkon
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.

Python3
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ýkon
returns a new namedtuple : Student(name='Manjeet', age='19', DOB='2541997')>

__Nový__()

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.

Python3
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(name,age,DOB) print(Student.__new__(Student,'Himesh','19','26082003'))>

Výkon
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__().

Python3
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ýkon
('Himesh', '19', '26082003')>