Python admite un tipo de diccionario contenedor llamado ' tupla con nombre() 'presente en el módulo' colecciones '. En este artículo veremos cómo crear un NameTuple y operaciones en NamedTuple.
¿Qué es NamedTuple en Python?
En Pitón NamedTuple está presente dentro del módulo de colecciones . Proporciona una manera de crear estructuras de datos simples y livianas similares a una clase pero sin la sobrecarga de definir una clase completa. Al igual que los diccionarios, contienen claves cifradas en un valor determinado. Por el contrario, admite tanto el acceso desde clave-valor como la iteración de la funcionalidad que diccionarios falta.
¿Puede la clase abstracta tener constructor?
Sintaxis de Python NamedTuple
tupla nombrada (nombre de tipo nombres_de_campo)
- typename: el nombre de la tupla nombrada.
- field_names: la lista de atributos almacenados en la tupla nombrada.
Ejemplo: La implementación del código de NamedTuple se muestra en Pitón .
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) 
Producción
The Student age using index is : 19 The Student name using keyname is : Nandini
Operaciones en NamedTuple
A continuación se detallan las siguientes operaciones que se pueden realizar utilizando nombradotuple():
- Crear una tupla de nombres
- Operaciones de acceso
- Operaciones de conversión
- Operaciones adicionales
Crear un NameTuple en Python
Esto crea una nueva clase nombradatuple usando la función nombradatuple() del colecciones módulo. El primer argumento es el nombre de la nueva clase y el segundo argumento es una lista de nombres de campos.
Pythonfrom collections import namedtuple Point = namedtuple('Point' ['x' 'y']) p = Point(x=1 y=2) print(p.x p.y) 
Producción
1 2
Operaciones de acceso
Las tuplas con nombre en Python proporcionan formas convenientes de acceder a sus campos. A continuación se muestran algunas operaciones de acceso proporcionadas en Python para NamedTuple:
- Acceso por índice
- Acceso por nombre clave
- Acceder usando getattr()
Acceso por índice
Los valores de los atributos de nametuple() están ordenados y se puede acceder a ellos utilizando el número de índice, a diferencia de los diccionarios a los que no se puede acceder por índice. En este ejemplo accedemos al estudiante mediante el índice.
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]) 
Producción
The Student age using index is : 19
Acceso por nombre clave
También se permite el acceso por nombre clave como en los diccionarios. En este ejemplo estamos usando keyname para acceder al nombre del estudiante.
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) 
Producción
The Student name using keyname is : Nandini
Acceder usando getattr()
Esta es otra forma más de acceder al valor proporcionando una tupla nombrada y un valor clave como argumento. En este ejemplo estamos usando getattr() para acceder a la identificación del estudiante en la tupla con nombre dada.
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')) 
Producción
The Student DOB using getattr() is : 2541997
Operaciones de conversión
Namedtuples proporciona algunas operaciones de conversión útiles para trabajar con otros tipos de datos en Pitón . A continuación se muestran las siguientes operaciones de conversión que se proporcionan para las tuplas con nombre en Python:
- Usando _make()
- Usando _asdict()
- Usando el operador ** (doble estrella)
Conversión usando _make()
Esta función se utiliza para devolver un nametuple() del iterable pasado como argumento. En este ejemplo estamos usando _make() para convertir la lista 'li' en una tupla con nombre.
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)) 
Producción
The namedtuple instance using iterable is : Student(name='Manjeet' age='19' DOB='411997')
Operación de conversión usando _asdict()
Esta función devuelve el DictOrdenado() tal como se construye a partir de los valores asignados de namedtuple(). En este ejemplo estamos usando _asdict() para convertir la lista de entrada en una instancia de tupla con nombre.
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()) 
Producción
The OrderedDict instance using namedtuple is : OrderedDict([('name' 'Nandini') ('age' '19') ('DOB' '2541997')]) Usando el operador '**' (doble estrella)
Esta función se utiliza para convertir un diccionario en la tupla nombrada(). En este ejemplo estamos usando '**' para convertir la lista de entrada en tupla con nombre.
ejemplo de formato jsonPython
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)) 
Producción
The namedtuple instance from dict is : Student(name='Nikhil' age=19 DOB='1391997')
Operaciones adicionales
Hay algunas operaciones adicionales que se proporcionan en Pitón para tuplas con nombre:
- _campos
- _reemplazar()
- __nuevo__()
- __getnewargs__()
_campos
Este atributo de datos se utiliza para obtener todos los nombres clave del espacio de nombres declarado. En este ejemplo estamos usando _fields para declarar todos los nombres clave del espacio de nombres.
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) 
Producción
All the fields of students are : ('name' 'age' 'DOB') _reemplazar()
_replace() es como str.replace() pero apunta a campos con nombre (no modifica los valores originales). En este ejemplo usamos _replace() para reemplazar un nombre de 'Nandini' a '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')) 
Producción
returns a new namedtuple : Student(name='Manjeet' age='19' DOB='2541997')
__nuevo__()
Esta función devuelve una nueva instancia de la clase Estudiante tomando los valores que queremos asignar a las claves en la tupla nombrada. En este ejemplo estamos usando __new__() para devolver una nueva instancia de la clase Estudiante.
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')) 
Producción
Student(name='Himesh' age='19' DOB='26082003')
__getnewargs__()
Esta función devuelve la tupla nombrada como una tupla simple. En este ejemplo estamos haciendo lo mismo usando __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__()) 
Producción
('Himesh' '19' '26082003') 
- Mutabilidad : Las instancias de una clase pueden ser mutables o inmutables mientras
namedtuplelas instancias son inmutables.- Métodos : Las clases pueden contener métodos (funciones) mientras
namedtupleproporciona principalmente una forma de almacenar datos con campos con nombre.- Herencia : Las clases soportan la herencia permitiendo la creación de jerarquías complejas mientras que
namedtupleno admite herencia.
¿Cuál es la diferencia entre dict escrito y nombrado tuple?
- Tipo de verificación :
TypedDict(desdetypingmódulo) proporciona sugerencias de tipo para diccionarios con pares clave-valor específicos útiles para la verificación de tipos.namedtupleno proporciona sugerencias de tipo.- Mutabilidad :
TypedDictlas instancias son mutables permitiendo cambios en los valores mientrasnamedtuplelas instancias son inmutables.- Estructura :
TypedDictse utiliza para definir la estructura de diccionarios con tipos específicos para cada clave, mientras quenamedtupleproporciona campos con nombre para datos tipo tupla.
