logo

Namedtuple v Pythonu

Python podpira vrsto vsebniškega slovarja, imenovanega ' namedtuple() 'prisoten v modulu' zbirke '. V tem članku si bomo ogledali, kako ustvariti NameTuple in operacije na NamedTuple.

Kaj je NamedTuple v Pythonu?

notri Python NamedTuple je prisoten znotraj modul zbirk . Zagotavlja način za ustvarjanje preprostih lahkih podatkovnih struktur, podobnih razredu, vendar brez dodatnih stroškov definiranja celotnega razreda. Tako kot slovarji vsebujejo ključe, ki so zgoščeni na določeno vrednost. Nasprotno podpira tako dostop iz para ključ-vrednost kot iteracijo funkcionalnosti, ki slovarji pomanjkanje.



če drugače bash

Sintaksa Python NamedTuple

namedtuple(typename field_names)

  • typename – ime namedtuple.
  • field_names – seznam atributov, shranjenih v namedtuple.

primer: Izvedba kode NamedTuple je prikazana 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) 

Izhod
The Student age using index is : 19 The Student name using keyname is : Nandini 

Operacije na NamedTuple

Spodaj so naslednje operacije, ki jih je mogoče izvesti z uporabo namedtuple():



  • Ustvarite NameTuple
  • Operacije dostopa
  • Pretvorbene operacije
  • Dodatne operacije

Ustvarite NameTuple v Pythonu

To ustvari nov razred namedtuple s funkcijo namedtuple() iz zbirke modul. Prvi argument je ime novega razreda, drugi argument pa je seznam imen polj.

Python
from collections import namedtuple Point = namedtuple('Point' ['x' 'y']) p = Point(x=1 y=2) print(p.x p.y) 

Izhod
1 2 

Operacije dostopa

Imenovane dvojke v Pythonu ponujajo priročne načine za dostop do njihovih polj. Spodaj je nekaj operacij dostopa, ki so na voljo v Pythonu za NamedTuple:

  • Dostop po indeksu
  • Dostop s ključem
  • Dostop z getattr()

Dostop po indeksu

Vrednosti atributa namedtuple() so urejene in do njih je mogoče dostopati s številko indeksa, za razliko od slovarjev, ki niso dostopni z indeksom. V tem primeru dostopamo do študentovega z uporabo 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]) 

Izhod
The Student age using index is : 19 

Dostop s ključem

Kot v slovarjih je dovoljen tudi dostop po imenu ključa. V tem primeru uporabljamo keyname za dostop do študentovega imena.

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) 

Izhod
The Student name using keyname is : Nandini 

Dostop z getattr()

To je še en način za dostop do vrednosti tako, da podate namedtuple in vrednost ključa kot njen argument. V tem primeru uporabljamo getattr() za dostop do študentovega ID-ja v dani 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')) 

Izhod
The Student DOB using getattr() is : 2541997 

Pretvorbene operacije

Namedtuples zagotavljajo nekaj uporabnih operacij pretvorbe za delo z drugimi tipi podatkov Python . Spodaj so naslednje operacije pretvorbe, ki so na voljo za imenovane dvojke v Pythonu:

  • Uporaba _make()
  • Uporaba _asdict()
  • Uporaba operatorja ** (dvojna zvezdica).

Pretvorba z uporabo _make()

Ta funkcija se uporablja za vrnitev a namedtuple() iz iterable sprejet kot argument. V tem primeru uporabljamo _make() za pretvorbo seznama 'li' v 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)) 

Izhod
The namedtuple instance using iterable is : Student(name='Manjeet' age='19' DOB='411997') 

Operacija pretvorbe z uporabo _asdict()

Ta funkcija se vrne the OrderedDict() kot je sestavljen iz preslikanih vrednosti namedtuple(). V tem primeru uporabljamo _asdict() za pretvorbo vhodnega seznama v primerek 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()) 

Izhod
The OrderedDict instance using namedtuple is : OrderedDict([('name' 'Nandini') ('age' '19') ('DOB' '2541997')]) 

Uporaba operatorja '**' (dvojna zvezdica).

Ta funkcija se uporablja za pretvorbo slovarja v namedtuple(). V tem primeru uporabljamo '**' za pretvorbo vhodnega seznama v namedtuple.

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

Izhod
The namedtuple instance from dict is : Student(name='Nikhil' age=19 DOB='1391997') 

Dodatne operacije 

Obstaja nekaj dodatnih operacij, ki so na voljo v Python za NamedTuples:

  • _polja
  • _replace()
  • __novo__()
  • __getnewwargs__()

_polja

Ta podatkovni atribut se uporablja za pridobivanje vsa ključna imena deklariranega imenskega prostora. V tem primeru uporabljamo _fields, da dobimo deklarirana vsa imena ključev imenskega 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) 

Izhod
All the fields of students are : ('name' 'age' 'DOB') 

_replace()

_replace() je kot str.replace(), vendar cilja na imenovana polja (ne spreminja izvirnih vrednosti). V tem primeru uporabljamo _replace() za zamenjavo imena iz 'Nandini' v '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')) 

Izhod
returns a new namedtuple : Student(name='Manjeet' age='19' DOB='2541997') 

__novo__()

Ta funkcija vrne nov primerek razreda Student tako, da vzame vrednosti, ki jih želimo dodeliti ključem v imenovani tuple. V tem primeru uporabljamo __new__() za vrnitev novega primerka razreda 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')) 

Izhod
Student(name='Himesh' age='19' DOB='26082003') 

__getnewwargs__()

Ta funkcija vrne imenovano torko kot navadno torko. V tem primeru delamo enako z uporabo __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__()) 

Izhod
('Himesh' '19' '26082003') 
    1. Spremenljivost : Primerki razreda so lahko spremenljivi ali nespremenljivi medtemnamedtupleprimerki so nespremenljivi.
    2. Metode : Razredi lahko vsebujejo metode (funkcije), medtem konamedtuplezagotavlja predvsem način za shranjevanje podatkov z poimenovanimi polji.
    3. Dedovanje : Razredi podpirajo dedovanje, ki omogoča ustvarjanje kompleksnih hierarhij, medtem konamedtuplene podpira dedovanja.

    Kakšna je razlika med typed dict in namedtuple?

    1. Preverjanje tipa :TypedDict(iztypingmodul) ponuja tipske namige za slovarje s posebnimi pari ključ-vrednost, uporabnimi za preverjanje tipa.namedtuplene ponuja tipskih namigov.
    2. Spremenljivost :TypedDictprimerki so spremenljivi, kar omogoča spreminjanje vrednosti medtemnamedtupleprimerki so nespremenljivi.
    3. Struktura :TypedDictse uporablja za definiranje strukture slovarjev s posebnimi tipi za vsak ključ, medtem konamedtupleponuja imenovana polja za podatke, podobne tulu.