Python podporuje typ kontejnerového slovníku s názvem ' Namedtuple() 'přítomný v modulu' sbírky '. V tomto článku se podíváme na to, jak vytvořit NameTuple a operace na NamedTuple.
Co je NamedTuple v Pythonu?
V Krajta NamedTuple je přítomen uvnitř modul sbírek . Poskytuje způsob, jak vytvořit jednoduché odlehčené datové struktury podobné třídě, ale bez režie definování celé třídy. Stejně jako slovníky obsahují klíče, které jsou hashovány na konkrétní hodnotu. Naopak podporuje jak přístup z páru klíč-hodnota, tak iteraci funkcí, které slovníky nedostatek.
Syntaxe Pythonu NamedTuple
namedtuple(název typu název_pole)
- typename – Název pojmenované množiny.
- field_names - Seznam atributů uložených v namedtuple.
Příklad: Implementace kódu NamedTuple je zobrazena v Krajta .
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) 
Výstup
The Student age using index is : 19 The Student name using keyname is : Nandini
Operace na NamedTuple
Níže jsou uvedeny následující operace, které lze provést pomocí Namedtuple():
- Vytvořte NameTuple
- Přístupové operace
- Konverzní operace
- Další operace
Vytvořte NameTuple v Pythonu
Tím se vytvoří nová třída namedtuple pomocí funkce namedtuple() z sbírky modul. První argument je název nové třídy a druhý argument je seznam názvů polí.
Pythonfrom collections import namedtuple Point = namedtuple('Point' ['x' 'y']) p = Point(x=1 y=2) print(p.x p.y) 
Výstup
1 2
Přístupové operace
Namedtuple v Pythonu poskytují pohodlné způsoby přístupu k jejich polím. Níže jsou uvedeny některé operace přístupu poskytované v Pythonu pro NamedTuple:
- Přístup podle indexu
- Přístup pomocí názvu klíče
- Přístup pomocí getattr()
Přístup podle indexu
Hodnoty atributů namedtuple() jsou seřazeny a lze k nim přistupovat pomocí čísla indexu na rozdíl od slovníků, které nejsou přístupné pomocí indexu. V tomto příkladu přistupujeme ke studentovi pomocí indexu.
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]) 
Výstup
The Student age using index is : 19
Přístup pomocí názvu klíče
Přístup podle názvu klíče je také povolen jako ve slovnících. V tomto příkladu používáme keyname pro přístup ke jménu studenta.
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) 
Výstup
The Student name using keyname is : Nandini
Přístup pomocí getattr()
Toto je další způsob, jak získat přístup k hodnotě tím, že jako argument uvedete nametuple a hodnotu klíče. V tomto příkladu používáme getattr() pro přístup k id studenta v daném nametuple.
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')) 
Výstup
The Student DOB using getattr() is : 2541997
Konverzní operace
Namedtuple poskytují několik užitečných převodních operací pro práci s jinými datovými typy Krajta . Níže jsou uvedeny následující převodní operace, které jsou k dispozici pro namedtuples v Pythonu:
- Použití _make()
- Použití _asdict()
- Použití operátoru ** (dvojitá hvězdička).
Konverze pomocí _make()
Tato funkce se používá k návratu a namedtuple() z iterable prošlo jako argument. V tomto příkladu používáme _make() k převodu seznamu 'li' na 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)) 
Výstup
The namedtuple instance using iterable is : Student(name='Manjeet' age='19' DOB='411997')
Konverzní operace pomocí _asdict()
Tato funkce se vrací a OrderedDict() jak je vytvořeno z mapovaných hodnot namedtuple(). V tomto příkladu používáme _asdict() k převodu vstupního seznamu do instance 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 _asdict() to return an OrderedDict() print('The OrderedDict instance using namedtuple is : ') print(S._asdict()) 
Výstup
The OrderedDict instance using namedtuple is : OrderedDict([('name' 'Nandini') ('age' '19') ('DOB' '2541997')]) Použití operátoru '**' (dvojitá hvězdička).
Tato funkce se používá k převodu slovníku na namedtuple(). V tomto příkladu používáme '**' k převodu vstupního seznamu na 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)) 
Výstup
The namedtuple instance from dict is : Student(name='Nikhil' age=19 DOB='1391997')
Další operace
Existují některé další operace, které jsou poskytovány v Krajta pro NamedTuples:
třídicí algoritmy merge sort
- _pole
- _nahradit()
- __nový__()
- __getnewargs__()
_pole
Tento atribut dat se používá k získání všechna klíčová jména deklarovaného jmenného prostoru. V tomto příkladu používáme _fields k získání všech názvů klíčů deklarovaného jmenného prostoru.
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) 
Výstup
All the fields of students are : ('name' 'age' 'DOB') _nahradit()
_replace() je jako str.replace(), ale cílí na pojmenovaná pole( nemění původní hodnoty). V tomto příkladu používáme _replace() k nahrazení názvu z 'Nandini' na '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')) 
Výstup
returns a new namedtuple : Student(name='Manjeet' age='19' DOB='2541997')
__nový__()
Tato funkce vrací novou instanci třídy Student převzetím hodnot, které chceme přiřadit klíčům v pojmenované n-tice. V tomto příkladu používáme __new__() k vrácení nové instance třídy 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')) 
Výstup
Student(name='Himesh' age='19' DOB='26082003')
__getnewargs__()
Tato funkce vrátí pojmenovanou n-tice jako obyčejnou n-tici. V tomto příkladu děláme totéž pomocí __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__()) 
Výstup
('Himesh' '19' '26082003') 
- Proměnlivost : Instance třídy mohou být proměnlivé nebo neměnné while
namedtupleinstance jsou neměnné.- Metody : Třídy mohou obsahovat metody (funkce) while
namedtupleprimárně poskytuje způsob ukládání dat s pojmenovanými poli.- Dědictví : Třídy podporují dědičnost umožňující vytváření složitých hierarchií
namedtuplenepodporuje dědičnost.
Jaký je rozdíl mezi typed dict a namedtuple?
- Kontrola typu :
TypedDict(ztypingmodul) poskytuje typové rady pro slovníky se specifickými páry klíč-hodnota užitečné pro kontrolu typu.namedtupleneposkytuje typové rady.- Proměnlivost :
TypedDictinstance jsou proměnlivé a umožňují změny hodnot whilenamedtupleinstance jsou neměnné.- Struktura :
TypedDictse používá k definování struktury slovníků se specifickými typy pro každý klíčnamedtupleposkytuje pojmenovaná pole pro data podobná n-tice.
