logo

Namedtuple v Pythonu

Python podporuje typ kontejnerového slovníku tzv 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 hašovány na konkrétní hodnotu. Naopak, podporuje jak přístup z páru klíč-hodnota, tak iteraci, tedy funkcionalitu slovníky nedostatek.

Syntaxe Pythonu NamedTuple

namedtuple(název typu, názvy_polí)



  • typename – Název pojmenované množiny.
  • field_names – seznam atributů uložených ve jmenované množině.

Příklad: Implementace kódu NamedTuple je zobrazena v Krajta .

jak stáhnout youtube video vlc
Python3
# 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í.

narodil se Freddie Mercury
Python3
from 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.

Python3
# 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.

Python3
# 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.

sql pořadí náhodně
Python3
# 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

Namedtples 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 poskytovány 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.

Python3
# 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 na instanci namedtuple.

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

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 seznamu vstupů na namedtuple.

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

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:

  • _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.

kolik uncí je 10 mililitrů
Python3
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)>

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í jména z Nandini na Manjeet.

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

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.

Python3
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(name,age,DOB) 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__().

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

Výstup
('Himesh', '19', '26082003')>