Python podržava vrstu rječnika spremnika pod nazivom ' namedtuple() '. U ovom članku ćemo vidjeti kako stvoriti NameTuple i operacije na NamedTuple.
U Piton modul zbirki . Omogućuje način stvaranja jednostavnih laganih struktura podataka sličnih klasi, ali bez dodatnih troškova definiranja cijele klase. Kao i rječnici, oni sadrže ključeve koji su raspršeni na određenu vrijednost. Naprotiv, podržava i pristup iz ključa/vrijednosti i iteraciju funkcionalnosti koja rječnicima nedostatak.
- field_names - Popis atributa pohranjenih u namedtuple.
Primjer: Implementacija koda NamedTuple prikazana je u Piton .
kakicaPython
# 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) 
Izlaz
The Student age using index is : 19 The Student name using keyname is : Nandini
Ispod su sljedeće operacije koje se mogu izvesti pomoću namedtuple():
- Stvorite NameTuple
- Operacije pristupa
- Operacije pretvorbe
- Dodatne operacije
Stvorite NameTuple u Pythonu
Ovo stvara novu namedtuple klasu pomoću funkcije namedtuple() iz zbirke modul. Prvi argument je naziv nove klase, a drugi argument je popis naziva polja.
Pythonfrom collections import namedtuple Point = namedtuple('Point' ['x' 'y']) p = Point(x=1 y=2) print(p.x p.y) 
Izlaz
1 2
Operacije pristupa
Namedtuples u Pythonu pružaju praktične načine pristupa njihovim poljima. Ispod su neke operacije pristupa u Pythonu za NamedTuple:
- Pristup po indeksu
- Pristup pomoću ključnog imena
- Pristup pomoću getattr()
Pristup putem indeksa
Vrijednosti atributa namedtuple() su raspoređene i može im se pristupiti pomoću indeksnog broja za razliku od rječnika koji nisu dostupni putem indeksa. U ovom primjeru pristupamo studentovom pomoću indeksa.
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]) 
Izlaz
The Student age using index is : 19
Pristup pomoću ključnog imena
Pristup pomoću naziva ključa također je dopušten kao u rječnicima. U ovom primjeru koristimo keyname za pristup imenu učenika.
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) 
Izlaz
The Student name using keyname is : Nandini
Pristup pomoću getattr()
Ovo je još jedan način pristupa vrijednosti davanjem namedtuple i vrijednosti ključa kao argumenta. U ovom primjeru koristimo getattr() za pristup ID-u učenika u zadanoj namedtuple.
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')) 
Izlaz
The Student DOB using getattr() is : 2541997
Operacije pretvorbe
Namedtuples pružaju nekoliko korisnih operacija pretvorbe za rad s drugim vrstama podataka Piton . Ispod su sljedeće operacije pretvorbe koje se pružaju za namedtuples u Pythonu:
- Korištenje _make()
- Korištenje _asdict()
- Korištenje operatora ** (dvostruka zvjezdica).
Pretvorba pomoću _make()
Ova se funkcija koristi za vraćanje a namedtuple() iz iterable prošao kao argument. U ovom primjeru koristimo _make() za pretvaranje popisa 'li' u 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)) 
Izlaz
The namedtuple instance using iterable is : Student(name='Manjeet' age='19' DOB='411997')
Operacija pretvorbe pomoću _asdict()
Ova funkcija se vraća the OrderedDict() kako je konstruirano iz mapiranih vrijednosti namedtuple(). U ovom primjeru koristimo _asdict() za pretvaranje ulaznog popisa u instancu 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 _asdict() to return an OrderedDict() print('The OrderedDict instance using namedtuple is : ') print(S._asdict()) 
Izlaz
The OrderedDict instance using namedtuple is : OrderedDict([('name' 'Nandini') ('age' '19') ('DOB' '2541997')]) Korištenje operatora '**' (dvostruka zvjezdica).
Ova se funkcija koristi za pretvaranje rječnika u namedtuple(). U ovom primjeru koristimo '**' za pretvaranje ulaznog popisa u 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)) 
Izlaz
The namedtuple instance from dict is : Student(name='Nikhil' age=19 DOB='1391997')
Dodatne operacije
Postoje neke dodatne operacije koje su dostupne u Piton za NamedTuples:
'bankarov algoritam'
- _polja
- _zamijeniti()
- __novi__()
- __getnewwargs__()
_polja
Ovaj atribut podataka koristi se za dobivanje sva imena ključeva deklariranog imenskog prostora. U ovom primjeru koristimo _fields kako bismo dobili sva deklarirana imena ključeva imenskog prostora.
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) 
Izlaz
All the fields of students are : ('name' 'age' 'DOB') _zamijeniti()
_replace() je poput str.replace() ali cilja imenovana polja (ne mijenja izvorne vrijednosti). U ovom primjeru koristimo _replace() za zamjenu imena iz 'Nandini' u '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')) 
Izlaz
returns a new namedtuple : Student(name='Manjeet' age='19' DOB='2541997')
__novi__()
Ova funkcija vraća novu instancu klase Student uzimajući vrijednosti koje želimo dodijeliti ključevima u imenovanoj torki. U ovom primjeru koristimo __new__() za vraćanje nove instance klase Student.
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')) 
Izlaz
Student(name='Himesh' age='19' DOB='26082003')
__getnewwargs__()
Ova funkcija vraća imenovanu torku kao običnu torku. U ovom primjeru radimo isto koristeći __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__()) 
Izlaz
('Himesh' '19' '26082003') 
- Promjenjivost : Instance klase mogu biti promjenjive ili nepromjenjive dok
namedtupleinstance su nepromjenjive.- Metode : Klase mogu sadržavati metode (funkcije) dok
namedtupleprimarno pruža način pohranjivanja podataka s imenovanim poljima.- Nasljedstvo : Klase podržavaju nasljeđivanje dopuštajući stvaranje složenih hijerarhija dok
namedtuplene podržava nasljeđivanje.
Koja je razlika između typed dict i namedtuple?
- Provjera tipa :
TypedDict(odtypingmodul) pruža tipske savjete za rječnike s određenim parovima ključ-vrijednost korisnim za provjeru tipa.namedtuplene daje tipske savjete.- Promjenjivost :
TypedDictinstance su promjenjive dopuštajući promjene vrijednosti doknamedtupleinstance su nepromjenjive.- Struktura :
TypedDictkoristi se za definiranje strukture rječnika s određenim tipovima za svaki ključ doknamedtuplepruža imenovana polja za podatke nalik na tuple.
