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')
- Premenlivosť : Inštancie triedy môžu byť meniteľné alebo nemenné
namedtupleinštancie sú nemenné.- Metódy : Triedy môžu obsahovať metódy (funkcie) while
namedtupleposkytuje predovšetkým spôsob ukladania údajov s pomenovanými poľami.- 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?
- 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.- Premenlivosť :
TypedDictinštancie sú meniteľné, čo umožňuje zmeny hodnôt whilenamedtupleinštancie sú nemenné.- Š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.