namedtuple y OrderedDict
Otras colecciones útiles
namedtuple y OrderedDict es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.
Otras dos colecciones prácticas
El módulo collections incluye namedtuple para crear tuplas legibles similares a registros y OrderedDict para crear diccionarios con métodos adicionales de ordenación.
Impórtelos con from collections import namedtuple, OrderedDict.
from collections import namedtuple, OrderedDict
print(namedtuple)
print(OrderedDict)Definir un namedtuple
namedtuple(name, fields) crea una nueva subclase de tupla. Debe proporcionar el nombre del tipo y una lista de nombres de campos. El resultado es una clase que puede instanciar.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p)Acceder por nombre
La gran ventaja es que puede leer los campos por nombre en lugar de usar índices poco claros, lo que hace que el código sea mucho más legible.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p.x)
print(p.y)Sigue siendo una tupla
Un namedtuple es una tupla real, por lo que la indexación, el desempaquetado y la iteración siguen funcionando.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p[0])
x, y = p
print(x + y)Inmutable, pero reemplazable
Al igual que todas las tuplas, los namedtuples son inmutables. Para obtener una copia modificada, use ._replace(), que devuelve una instancia nueva.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
q = p._replace(y=10)
print(p)
print(q)Convertir en un diccionario
._asdict() convierte un namedtuple en un diccionario normal que asigna nombres de campos a valores.
from collections import namedtuple
Car = namedtuple('Car', ['make', 'year'])
c = Car('Toyota', 2026)
print(c._asdict())Valores predeterminados
Proporcione defaults al definir un namedtuple. Los valores predeterminados se aplican a los campos situados más a la derecha, por lo que puede omitirlos al crear instancias.
from collections import namedtuple
User = namedtuple('User', ['name', 'role'], defaults=['guest'])
print(User('Alice'))
print(User('Bob', 'admin'))Inspeccionar los campos
El atributo ._fields enumera los nombres de los campos, lo que resulta útil para la introspección o para crear código genérico.
from collections import namedtuple
Color = namedtuple('Color', ['r', 'g', 'b'])
print(Color._fields)Conceptos básicos de OrderedDict
OrderedDict recuerda el orden de inserción. Desde Python 3.7, los diccionarios normales también conservan el orden, pero OrderedDict añade métodos adicionales de ordenación que no están disponibles de otra forma.
from collections import OrderedDict
od = OrderedDict()
od['first'] = 1
od['second'] = 2
print(od)move_to_end
.move_to_end(key) desplaza una clave al final, o al principio con last=False. Esta operación es exclusiva de OrderedDict y resulta útil para una lógica del tipo LRU.
from collections import OrderedDict
od = OrderedDict(a=1, b=2, c=3)
od.move_to_end('a')
print(list(od.keys()))
od.move_to_end('c', last=False)
print(list(od.keys()))Igualdad sensible al orden
Dos objetos OrderedDict son iguales solo si sus elementos están en el mismo orden. Los diccionarios normales ignoran el orden al compararlos.
from collections import OrderedDict
a = OrderedDict([('x', 1), ('y', 2)])
b = OrderedDict([('y', 2), ('x', 1)])
print(a == b)
print(dict(a) == dict(b))Comprobación rápida
¿Cómo se crea una copia modificada de un namedtuple, dado que es inmutable?
Resumen: namedtuple y OrderedDict
Resumen:
namedtuple(name, fields)crea registros legibles e inmutables con acceso mediante nombres.- Use
._replace()para crear copias modificadas y._asdict()para convertirlos en un diccionario. OrderedDictconserva el orden de inserción y añade.move_to_end().- La igualdad de OrderedDict depende del orden, a diferencia de la de un diccionario normal.
from collections import namedtuple
Pt = namedtuple('Pt', ['x', 'y'])
print(Pt(1, 2)._asdict())Preguntas frecuentes
¿La lección «namedtuple y OrderedDict» es gratis?
Sí — el texto completo de «namedtuple y OrderedDict» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.
¿Qué aprenderé en «namedtuple y OrderedDict»?
Otras colecciones útiles Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Python Academy?
No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «namedtuple y OrderedDict»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Python Academy?
Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Counter
- defaultdict
- deque
- namedtuple y OrderedDict