logo

Namedtuple u Pythonu

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 .

kakica
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) 

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.

Python
from 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.

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()) 

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.

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)) 

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.

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) 

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

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')) 

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.

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')) 

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

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__()) 

Izlaz
('Himesh' '19' '26082003') 
    1. Promjenjivost : Instance klase mogu biti promjenjive ili nepromjenjive doknamedtupleinstance su nepromjenjive.
    2. Metode : Klase mogu sadržavati metode (funkcije) doknamedtupleprimarno pruža način pohranjivanja podataka s imenovanim poljima.
    3. Nasljedstvo : Klase podržavaju nasljeđivanje dopuštajući stvaranje složenih hijerarhija doknamedtuplene podržava nasljeđivanje.

    Koja je razlika između typed dict i namedtuple?

    1. 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.
    2. Promjenjivost :TypedDictinstance su promjenjive dopuštajući promjene vrijednosti doknamedtupleinstance su nepromjenjive.
    3. Struktura :TypedDictkoristi se za definiranje strukture rječnika s određenim tipovima za svaki ključ doknamedtuplepruža imenovana polja za podatke nalik na tuple.