Python stöder en typ av behållarordbok som heter ' namedtuple() ' närvarande i modulen ' samlingar '. I den här artikeln kommer vi att se hur man skapar en NameTuple och operationer på NamedTuple.
Vad är NamedTuple i Python?
I Python NamedTuple finns inuti samlingsmodul . Det ger ett sätt att skapa enkla lättviktsdatastrukturer som liknar en klass men utan att behöva definiera en hel klass. Liksom ordböcker innehåller de nycklar som hashas till ett visst värde. Tvärtom stöder den både åtkomst från nyckel-värde och iteration funktionaliteten som ordböcker brist.
Python NamedTuple-syntax
namedtuple(typnamn fältnamn)
- typnamn - Namnet på namedtuple.
- field_names - Listan över attribut lagrade i namedtuple.
Exempel: Kodimplementering av NamedTuple visas i 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) 
Produktion
The Student age using index is : 19 The Student name using keyname is : Nandini
Operationer på NamedTuple
Nedan följer följande operationer som kan göras genom att använda namedtuple():
- Skapa en NameTuple
- Åtkomstverksamhet
- Konverteringsoperationer
- Ytterligare operationer
Skapa en NameTuple i Python
Detta skapar en ny namedtuple-klass med funktionen namedtuple() från samlingar modul. Det första argumentet är namnet på den nya klassen och det andra argumentet är en lista med fältnamn.
Pythonfrom collections import namedtuple Point = namedtuple('Point' ['x' 'y']) p = Point(x=1 y=2) print(p.x p.y) 
Produktion
1 2
Åtkomstverksamhet
Namedtuples i Python ger bekväma sätt att komma åt sina fält. Nedan finns några åtkomstoperationer som tillhandahålls i Python för NamedTuple:
- Åtkomst via index
- Åtkomst via nyckelnamn
- Åtkomst med getattr()
Åtkomst via index
Attributvärdena för namedtuple() är ordnade och kan nås med hjälp av indexnumret till skillnad från ordböcker som inte är tillgängliga via index. I det här exemplet kommer vi åt studentens genom att använda index.
resa menPython
# 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]) 
Produktion
The Student age using index is : 19
Åtkomst via nyckelnamn
Åtkomst med nyckelnamn är också tillåtet som i ordböcker. I det här exemplet använder vi nyckelnamn för att komma åt elevens namn.
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) 
Produktion
The Student name using keyname is : Nandini
Åtkomst med getattr()
Detta är ytterligare ett sätt att komma åt värdet genom att ange namedtuple och nyckelvärde som argument. I det här exemplet använder vi getattr() för att komma åt elevens id i den givna 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')) 
Produktion
The Student DOB using getattr() is : 2541997
Konverteringsoperationer
Namedtuples tillhandahåller några användbara konverteringsoperationer för att arbeta med andra datatyper i Python . Nedan finns följande konverteringsoperationer som tillhandahålls för namedtuples i Python:
- Använder _make()
- Använder _asdict()
- Använder operatorn ** (dubbelstjärna).
Konvertering med _make()
Denna funktion används för att returnera en namedtuple() från iterable passerade som argument. I det här exemplet använder vi _make() för att konvertera listan 'li' till 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)) 
Produktion
The namedtuple instance using iterable is : Student(name='Manjeet' age='19' DOB='411997')
Konverteringsoperation med _asdict()
Denna funktion returnerar de OrderedDict() som konstruerat från de mappade värdena för namedtuple(). I det här exemplet använder vi _asdict() för att konvertera indatalistan till namedtuple-instans.
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()) 
Produktion
The OrderedDict instance using namedtuple is : OrderedDict([('name' 'Nandini') ('age' '19') ('DOB' '2541997')]) Använder operatorn '**' (dubbelstjärna).
Denna funktion används för att konvertera en ordbok till namnettuple(). I det här exemplet använder vi '**' för att konvertera indatalistan till 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)) 
Produktion
The namedtuple instance from dict is : Student(name='Nikhil' age=19 DOB='1391997')
Ytterligare operationer
Det finns några ytterligare operationer som tillhandahålls i Python för NamedTuples:
- _fält
- _ersätta()
- __ny__()
- __getnewargs__()
_fält
Detta dataattribut används för att få alla nyckelnamn av det deklarerade namnområdet. I det här exemplet använder vi _fields för att få alla nyckelnamn för namnområdet deklarerade.
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) 
Produktion
All the fields of students are : ('name' 'age' 'DOB') _ersätta()
_replace() är som str.replace() men riktar sig till namngivna fält( ändrar inte de ursprungliga värdena). I det här exemplet använder vi _replace() för att ersätta ett namn från 'Nandini' till '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')) 
Produktion
returns a new namedtuple : Student(name='Manjeet' age='19' DOB='2541997')
__ny__()
Den här funktionen returnerar en ny instans av klassen Student genom att ta de värden som vi vill tilldela nycklarna i den namngivna tupeln. I det här exemplet använder vi __new__() för att returnera en ny instans av klassen 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')) 
Produktion
Student(name='Himesh' age='19' DOB='26082003')
__getnewargs__()
Denna funktion returnerar den namngivna tupeln som en vanlig tupel. I det här exemplet gör vi samma sak genom att använda __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__()) 
Produktion
('Himesh' '19' '26082003') 
- Föränderlighet : Förekomster av en klass kan vara föränderliga eller oföränderliga medan
namedtupleinstanser är oföränderliga.- Metoder : Klasser kan innehålla metoder (funktioner) medan
namedtupleger i första hand ett sätt att lagra data med namngivna fält.- Arv : Klasser stöder nedärvning vilket tillåter skapandet av komplexa hierarkier
namedtuplestöder inte arv.
Vad är skillnaden mellan maskinskriven dict och namedtuple?
- Typkontroll :
TypedDict(fråntypingmodule) ger typtips för ordböcker med specifika nyckel-värdepar användbara för typkontroll.namedtupleger inga typtips.- Föränderlighet :
TypedDictinstanser är föränderliga vilket tillåter ändringar av värdena medannamedtupleinstanser är oföränderliga.- Strukturera :
TypedDictanvänds för att definiera strukturen för ordböcker med specifika typer för varje nyckel medannamedtupletillhandahåller namngivna fält för tuppelliknande data.
