logo

Namedtuple en Python

Python admet un tipus de diccionari de contenidors anomenat namedtuple() present al mòdul col·leccions . En aquest article, veurem com crear un NameTuple i operacions a NamedTuple.

Què és NamedTuple a Python?

En Python , NamedTuple està present dins de mòdul de col·leccions . Proporciona una manera de crear estructures de dades senzilles i lleugeres semblants a una classe, però sense la sobrecàrrega de definir una classe completa. Igual que els diccionaris, contenen claus que tenen un valor determinat. Al contrari, admet tant l'accés des de clau-valor com la iteració, la funcionalitat que diccionaris mancança.

Sintaxi de Python NamedTuple

namedtuple(typename, field_names)



  • typename: el nom del namedtuple.
  • field_names: la llista d'atributs emmagatzemats a namedtuple.

Exemple: La implementació del codi de NamedTuple es mostra a Python .

fórmula de paleta
Python 3
# 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)>

Sortida
The Student age using index is : 19 The Student name using keyname is : Nandini>

Operacions a NamedTuple

A continuació es mostren les operacions següents que es poden fer utilitzant namedtuple():

  • Creeu un NameTuple
  • Operacions d'accés
  • Operacions de conversió
  • Operacions addicionals

Creeu un NameTuple a Python

Això crea una nova classe namedtuple utilitzant la funció namedtuple() de la col·leccions mòdul. El primer argument és el nom de la nova classe i el segon argument és una llista de noms de camp.

lògica proposicional
Python 3
from collections import namedtuple Point = namedtuple('Point', ['x', 'y']) p = Point(x=1, y=2) print(p.x, p.y)>

Sortida
1 2>

Operacions d'accés

Namedtuples a Python ofereixen maneres convenients d'accedir als seus camps. A continuació es mostren algunes operacions d'accés proporcionades a Python per a NamedTuple:

  • Accés per índex
  • Accés per nom clau
  • Accediu amb getattr()

Accés per índex

Els valors d'atribut de namedtuple() estan ordenats i es pot accedir mitjançant el número d'índex, a diferència dels diccionaris que no són accessibles per índex. En aquest exemple, estem accedint a l'estudiant mitjançant l'índex.

Python 3
# 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])>

Sortida
The Student age using index is : 19>

Accés per nom clau

També es permet l'accés per nom de clau com en els diccionaris. En aquest exemple, estem utilitzant keyname per accedir al nom de l'estudiant.

Python 3
# 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)>

Sortida
The Student name using keyname is : Nandini>

Accediu amb getattr()

Aquesta és una altra manera d'accedir al valor donant namedtuple i valor clau com a argument. En aquest exemple, estem utilitzant getattr() per accedir a l'identificador de l'estudiant al namedtuple donat.

Python 3
# 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'))>

Sortida
The Student DOB using getattr() is : 2541997>

Operacions de conversió

Namedtuples ofereix unes quantes operacions de conversió útils per treballar amb altres tipus de dades Python . A continuació es mostren les següents operacions de conversió que es proporcionen per a namedtuples a Python:

la roda del ratolí no es desplaça correctament
  • Utilitzant _make()
  • Utilitzant _asdict()
  • S'utilitza l'operador ** (doble estrella).

Conversió mitjançant _make()

Aquesta funció s'utilitza per retornar a namedtuple() de l'iterable passat com a argument. En aquest exemple, estem utilitzant _make() per convertir la llista li en namedtuple.

Python 3
# 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))>

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

Operació de conversió utilitzant _asdict()

Aquesta funció torna el OrderedDict() tal com es construeix a partir dels valors assignats de namedtuple(). En aquest exemple, estem utilitzant _asdict() per convertir la llista d'entrada en instància namedtuple.

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

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

S'utilitza l'operador ** (doble estrella).

Aquesta funció s'utilitza per convertir un diccionari en namedtuple(). En aquest exemple, estem utilitzant ** per convertir la llista d'entrada en namedtuple.

descarregar autocad 2019 anglès mediafire
Python 3
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))>

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

Operacions addicionals

Hi ha algunes operacions addicionals que es proporcionen a Python per a NamedTples:

  • _camps
  • _substituir()
  • __nou__()
  • __getnewargs__()

_camps

Aquest atribut de dades s'utilitza per obtenir tots els noms clau de l'espai de noms declarat. En aquest exemple, estem utilitzant _fields per obtenir tots els noms clau de l'espai de noms declarats.

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

Sortida
All the fields of students are : ('name', 'age', 'DOB')>

_substituir()

_replace() és com str.replace() però apunta a camps anomenats (no modifica els valors originals). En aquest exemple, estem utilitzant _replace() per substituir un nom de Nandini a Manjeet.

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

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

__nou__()

Aquesta funció retorna una nova instància de la classe Student, prenent els valors que volem assignar a les claus de la tupla anomenada. En aquest exemple, estem utilitzant __new__() per retornar una nova instància de la classe Student.

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

Sortida
Student(name='Himesh', age='19', DOB='26082003')>

__getnewargs__()

Aquesta funció retorna la tupla anomenada com una tupla normal. En aquest exemple, estem fent el mateix fent servir __getnewargs__().

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

Sortida
('Himesh', '19', '26082003')>