logo

Namedtuple Python

Python palaiko konteinerio žodyno tipą, vadinamą " namedtuple() 'yra modulyje' kolekcijos “. Šiame straipsnyje pamatysime, kaip sukurti NameTuple ir atlikti veiksmus su NameTuple.

Kas yra NamedTuple Python?

Į Python NamedTuple yra viduje kolekcijų modulis . Tai yra būdas sukurti paprastas lengvas duomenų struktūras, panašias į klasę, tačiau nereikia apibrėžti visos klasės. Kaip ir žodynuose, juose yra raktų, sumaišytų iki tam tikros vertės. Priešingai, jis palaiko prieigą prie rakto vertės ir funkcionalumo kartojimą žodynai trūkumas.

Python NamedTuple sintaksė

namedtuple(tipo pavadinimo lauko_pavadinimai)



pridedant java eilutes
  • tipo pavadinimas – namedtuple pavadinimas.
  • field_names – atributų, saugomų namedtuple, sąrašas.

Pavyzdys: NamedTuple kodo įgyvendinimas parodytas 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) 

Išvestis
The Student age using index is : 19 The Student name using keyname is : Nandini 

„NamedTuple“ operacijos

Žemiau pateikiamos šios operacijos, kurias galima atlikti naudojant namedtuple ():

  • Sukurkite NameTuple
  • Prieigos operacijos
  • Konversijos operacijos
  • Papildomos operacijos

Sukurkite NameTuple programoje Python

Taip sukuriama nauja namedtuple klasė naudojant namedtuple() funkciją iš kolekcijos modulis. Pirmasis argumentas yra naujos klasės pavadinimas, o antrasis argumentas yra laukų pavadinimų sąrašas.

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

Išvestis
1 2 

Prieigos operacijos

Pavadinimai Python suteikia patogius būdus pasiekti savo laukus. Toliau pateikiamos kai kurios prieigos operacijos, pateiktos „Python“, skirtos NamedTuple:

  • Prieiga pagal indeksą
  • Prieiga pagal rakto pavadinimą
  • Prieiga naudojant getattr()

Prieiga pagal indeksą

Namedtuple() atributų reikšmės yra sutvarkytos ir jas galima pasiekti naudojant indekso numerį, skirtingai nei žodynuose, kurių negalima pasiekti naudojant indeksą. Šiame pavyzdyje mes pasiekiame mokinio duomenis naudodami indeksą.

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

Išvestis
The Student age using index is : 19 

Prieiga pagal rakto pavadinimą

Prieiga pagal rakto pavadinimą taip pat leidžiama, kaip ir žodynuose. Šiame pavyzdyje mes naudojame rakto pavadinimą, kad pasiektume mokinio vardą.

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) 

Išvestis
The Student name using keyname is : Nandini 

Prieiga naudojant getattr()

Tai dar vienas būdas pasiekti vertę, kaip argumentą pateikiant namedtuple ir rakto reikšmę. Šiame pavyzdyje mes naudojame getattr() norėdami pasiekti studento ID duotame 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')) 

Išvestis
The Student DOB using getattr() is : 2541997 

Konversijos operacijos

Namedtuples pateikia keletą naudingų konvertavimo operacijų, skirtų dirbti su kitų tipų duomenimis Python . Toliau pateikiamos šios konvertavimo operacijos, kurios yra numatytos „Python“ vardiniams rinkiniams:

  • Naudojant _make()
  • Naudojant _asdict()
  • Naudojant ** (dvigubos žvaigždutės) operatorių

Konversija naudojant _make()

Ši funkcija naudojama norint grąžinti a namedtuple() iš iterable priimtas kaip argumentas. Šiame pavyzdyje mes naudojame _make(), norėdami konvertuoti sąrašą „li“ į 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)) 

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

Konversijos operacija naudojant _asdict()

Ši funkcija grįžta į OrderedDict() kaip sudaryta iš namedtuple() susietų reikšmių. Šiame pavyzdyje mes naudojame _asdict(), norėdami konvertuoti įvesties sąrašą į vardinį egzempliorių.

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

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

Naudojant operatorių „**“ (dvigubos žvaigždutės).

Ši funkcija naudojama konvertuoti žodyną į namedtuple(). Šiame pavyzdyje mes naudojame „**“, norėdami konvertuoti įvesties sąrašą į 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)) 

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

Papildomos operacijos 

Yra keletas papildomų operacijų, kurios yra pateiktos Python „NamedTuples“:

  • _laukai
  • _replace()
  • __naujas__()
  • __getnewargs__()

_laukai

Šis duomenų atributas naudojamas gauti visi raktų vardai paskelbtos vardų srities. Šiame pavyzdyje mes naudojame _fields, kad gautume visus deklaruotus vardų erdvės raktų pavadinimus.

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) 

Išvestis
All the fields of students are : ('name' 'age' 'DOB') 

_replace()

_replace() yra panašus į str.replace(), bet taikomas pavadintiems laukams( nekeičia pradinių reikšmių). Šiame pavyzdyje mes naudojame _replace(), kad pakeistume pavadinimą iš „Nandini“ į „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')) 

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

__naujas__()

Ši funkcija grąžina naują Studento klasės egzempliorių, paimdama reikšmes, kurias norime priskirti raktams pavadintoje kortoje. Šiame pavyzdyje mes naudojame __new__(), kad grąžintume naują Mokinio klasės egzempliorių.

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

Išvestis
Student(name='Himesh' age='19' DOB='26082003') 

__getnewargs__()

Ši funkcija grąžina pavadintą seką kaip paprastą seką. Šiame pavyzdyje mes darome tą patį naudodami __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__()) 

Išvestis
('Himesh' '19' '26082003') 
    1. Kintamumas : klasės egzemplioriai gali būti kintami arba nekintantysnamedtupleatvejai yra nepakeičiami.
    2. Metodai : klasėse gali būti metodų (funkcijų), onamedtuplepirmiausia suteikia galimybę saugoti duomenis su pavadintais laukais.
    3. Paveldėjimas : klasės palaiko paveldėjimą, leidžiantį sukurti sudėtingas hierarchijas, tuo tarpunamedtuplenepalaiko paveldėjimo.

    Kuo skiriasi tiped dict ir namedtuple?

    1. Tipo tikrinimas :TypedDict(ištypingmodulis) pateikia tipo užuominas žodynams su konkrečiomis raktų ir reikšmių poromis, naudingomis tikrinant tipą.namedtuplenepateikia tipo užuominų.
    2. Kintamumas :TypedDictegzemplioriai yra keičiami, leidžiantys keisti reikšmes, onamedtupleatvejai yra nepakeičiami.
    3. Struktūra :TypedDictnaudojamas apibrėžti žodynų struktūrą su konkrečiais kiekvieno rakto tipaisnamedtuplepateikia įvardintus laukus į eilutę panašiems duomenims.