logo

Genoemdtupel in Python

Python ondersteunt een type containerwoordenboek genaamd ' benoemddubbel() 'aanwezig in de module' collecties '. In dit artikel gaan we zien hoe u een NameTuple en bewerkingen op NamedTuple maakt.

Wat is NamedTuple in Python?

In Python NamedTuple is aanwezig in het collecties module . Het biedt een manier om eenvoudige lichtgewicht datastructuren te creëren die vergelijkbaar zijn met een klasse, maar zonder de overhead van het definiëren van een volledige klasse. Net als woordenboeken bevatten ze sleutels die zijn gehasht naar een bepaalde waarde. Integendeel, het ondersteunt zowel toegang vanuit sleutelwaarde als iteratie van de functionaliteit die dat biedt woordenboeken gebrek.



Python NamedTuple-syntaxis

benoemdtuple(typenaam veldnamen)

  • typename - De naam van de benoemde tweeling.
  • field_names - De lijst met attributen die zijn opgeslagen in de benoemde tupel.

Voorbeeld: Code-implementatie van NamedTuple wordt getoond in 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) 

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

Bewerkingen op NamedTuple

Hieronder staan ​​de volgende bewerkingen die kunnen worden uitgevoerd met nametuple():



  • Maak een NaamTupel
  • Toegang tot bewerkingen
  • Conversiebewerkingen
  • Aanvullende bewerkingen

Maak een NameTuple in Python

Hiermee wordt een nieuwe benoemdtuple-klasse gemaakt met behulp van de naamtuple()-functie uit de collecties module. Het eerste argument is de naam van de nieuwe klasse en het tweede argument is een lijst met veldnamen.

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

Uitvoer
1 2 

Toegang tot bewerkingen

Namedtuples in Python bieden handige manieren om toegang te krijgen tot hun velden. Hieronder staan ​​enkele toegangsbewerkingen in Python voor NamedTuple:

sterpatroon afdrukken
  • Toegang via index
  • Toegang via sleutelnaam
  • Toegang via getattr()

Toegang per index

De attribuutwaarden van genaamdtuple() zijn geordend en zijn toegankelijk via het indexnummer, in tegenstelling tot woordenboeken die niet toegankelijk zijn via de index. In dit voorbeeld benaderen we de gegevens van de leerling met behulp van index.



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

Uitvoer
The Student age using index is : 19 

Toegang via sleutelnaam

Toegang via sleutelnaam is ook toegestaan, net als in woordenboeken. In dit voorbeeld gebruiken we sleutelnaam om toegang te krijgen tot de naam van de leerling.

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) 

Uitvoer
The Student name using keyname is : Nandini 

Toegang via getattr()

Dit is nog een andere manier om toegang te krijgen tot de waarde, door het argumentnamedtuple en de sleutelwaarde op te geven. In dit voorbeeld gebruiken we getattr() om toegang te krijgen tot de ID van de leerling in de opgegeven benoemde tupel.

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

Uitvoer
The Student DOB using getattr() is : 2541997 

Conversiebewerkingen

Namedtuples bieden een aantal nuttige conversiebewerkingen om met andere gegevenstypen te werken Python . Hieronder staan ​​de volgende conversiebewerkingen die beschikbaar zijn voor benoemde tupels in Python:

  • _make() gebruiken
  • _asdict() gebruiken
  • Gebruik de operator ** (dubbele ster).

Conversie met _make()

Deze functie wordt gebruikt om a terug te geven nametuple() uit de iterabele als argument doorgegeven. In dit voorbeeld gebruiken we _make() om de lijst 'li' om te zetten in benoemdtuple.

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

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

Conversiebewerking met _asdict()

Deze functie retourneert de BesteldDict() zoals opgebouwd uit de toegewezen waarden van benoemdtuple(). In dit voorbeeld gebruiken we _asdict() om de invoerlijst te converteren naar een benoemde instantie.

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

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

Gebruik de operator '**' (dubbele ster).

Deze functie wordt gebruikt om een ​​woordenboek te converteren naar de naamtuple(). In dit voorbeeld gebruiken we '**' om de invoerlijst om te zetten in benoemdtupel.

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

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

Aanvullende bewerkingen 

Er zijn enkele aanvullende bewerkingen beschikbaar Python voor benoemde tupels:

  • _velden
  • _vervangen()
  • __nieuw__()
  • __krijgnieuwewargs__()

_velden

Dit data-attribuut wordt gebruikt om alle sleutelnamen van de aangegeven naamruimte. In dit voorbeeld gebruiken we _fields om alle sleutelnamen van de gedeclareerde naamruimte op te halen.

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) 

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

_vervangen()

_replace() is als str.replace() maar richt zich op benoemde velden (wijzigt de oorspronkelijke waarden niet). In dit voorbeeld gebruiken we _replace() om een ​​naam te vervangen van 'Nandini' naar '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')) 

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

__nieuw__()

Deze functie retourneert een nieuw exemplaar van de klasse Student door de waarden te nemen die we willen toewijzen aan de sleutels in de genoemde tupel. In dit voorbeeld gebruiken we __new__() om een ​​nieuw exemplaar van de klasse Student te retourneren.

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

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

__krijgnieuwewargs__()

Deze functie retourneert de benoemde tupel als een gewone tupel. In dit voorbeeld doen we hetzelfde door __getnewargs__() te gebruiken.

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

Uitvoer
('Himesh' '19' '26082003') 
    1. Veranderlijkheid : Instanties van een klasse kunnen veranderlijk of onveranderlijk zijn whilenamedtupleexemplaren zijn onveranderlijk.
    2. Methoden : Klassen kunnen methoden (functies) while bevattennamedtuplebiedt voornamelijk een manier om gegevens met benoemde velden op te slaan.
    3. Erfenis : Klassen ondersteunen overerving waardoor complexe hiërarchieën kunnen worden gecreëerdnamedtupleondersteunt geen erfenis.

    Wat is het verschil tussen een getypt dictaat en een benoemd dictaat?

    1. Typecontrole :TypedDict(van detypingmodule) biedt typehints voor woordenboeken met specifieke sleutel-waardeparen die handig zijn voor typecontrole.namedtuplegeeft geen typehints.
    2. Veranderlijkheid :TypedDictexemplaren zijn veranderlijk waardoor wijzigingen in de waarden whilenamedtupleexemplaren zijn onveranderlijk.
    3. Structuur :TypedDictwordt gebruikt om de structuur van woordenboeken te definiëren met specifieke typen voor elke sleutel, terwijlnamedtuplebiedt benoemde velden voor tuple-achtige gegevens.