logo

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.

java generiká

Č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.

Java databáza jdbc
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.

program pre prvočíslo v jave
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énamedtupleinštancie sú nemenné.
    2. Metódy : Triedy môžu obsahovať metódy (funkcie) whilenamedtupleposkytuje 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ínamedtuplenepodporuje dedičstvo.

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

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