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í.
Pythonfrom 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 jdbcPython
# 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 javePython
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.
Pythonimport 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.
Pythonimport 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'.
Pythonimport 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.
Pythonimport 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__().
Pythonimport 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.
