¡Domina las Colecciones de Python! Guía Completa de Listas y Diccionarios
Para ejecutar Python desde el símbolo del sistema o PowerShell en tu PC, necesitas descargar e instalar Python.
Si aún no lo has hecho, consulta el artículo Instalación de Python y configuración del entorno de desarrollo para instalar Python.
En la creación de sitios web y el desarrollo de aplicaciones, hay muchas situaciones en las que quieres manejar múltiples datos de manera eficiente, ¿verdad? Por ejemplo, una lista de artículos de un blog, la lista de productos de un sitio de comercio electrónico, la información de los usuarios, etc., todo esto son "conjuntos de datos". Python tiene un potente mecanismo llamado "colecciones" para gestionar estos conjuntos de datos de forma inteligente.
En este artículo, nos centraremos en las colecciones más importantes de Python, las "listas" y los "diccionarios", y explicaremos de forma sencilla desde lo básico hasta sus aplicaciones, con abundantes ejemplos de código que puedes copiar y pegar para que funcionen al instante, incluso si eres un creador web principiante. ¡Vamos a subir de nivel juntos tus habilidades de manipulación de datos experimentando con código que "funciona"!
1. Las "Listas": Organizando Datos en Orden
Lo primero que aprenderemos son las "listas". Una lista es la colección más básica que te permite almacenar múltiples datos en un orden secuencial. Como su nombre indica, es ideal para manejar datos donde el orden es importante, como una lista de la compra o una lista de tareas. En la creación web, es útil para gestionar los elementos de un menú de navegación, una lista de etiquetas de un blog o una lista de nombres de archivo de una galería de imágenes.
Cómo crear una lista
Crear una lista es muy fácil. Simplemente encierra los datos entre corchetes [] y sepáralos con comas ,. Puedes incluir números, cadenas de texto e incluso listas dentro de otras listas.
# Crear una lista de cadenas de texto
frutas = ["Manzana", "Plátano", "Naranja"]
print(frutas)
# Crear una lista de números
numeros = [1, 2, 3, 4, 5]
print(numeros)
# También es posible mezclar diferentes tipos de datos
lista_mixta = [1, "Hola", True, 3.14]
print(lista_mixta)
Resultado de la ejecución:
['Manzana', 'Plátano', 'Naranja']
[1, 2, 3, 4, 5]
[1, 'Hola', True, 3.14]
Acceder a los elementos (Índice)
Para obtener un dato específico (elemento) de una lista, se utiliza un número llamado "índice". Un punto importante a tener en cuenta es que los índices empiezan en 0. El primer elemento es [0], el segundo es [1], y así sucesivamente.
frutas = ["Manzana", "Plátano", "Naranja"]
# Obtener el primer elemento (índice 0)
primera_fruta = frutas[0]
print(f"Primera fruta: {primera_fruta}")
# Obtener el tercer elemento (índice 2)
tercera_fruta = frutas[2]
print(f"Tercera fruta: {tercera_fruta}")
Resultado de la ejecución:
Primera fruta: Manzana
Tercera fruta: Naranja
Añadir elementos (append)
Para añadir un nuevo elemento al final de una lista, se utiliza el método append(). Es como añadir una nueva entrada de blog al final de una lista.
frutas = ["Manzana", "Plátano", "Naranja"]
print(f"Antes de añadir: {frutas}")
# Añadir "Uva" al final de la lista
frutas.append("Uva")
print(f"Después de añadir: {frutas}")
Resultado de la ejecución:
Antes de añadir: ['Manzana', 'Plátano', 'Naranja']
Después de añadir: ['Manzana', 'Plátano', 'Naranja', 'Uva']
Modificar elementos
También puedes cambiar el valor de un elemento existente especificando su índice.
frutas = ["Manzana", "Plátano", "Naranja"]
print(f"Antes de modificar: {frutas}")
# Cambiar el segundo elemento (índice 1) a "Kiwi"
frutas[1] = "Kiwi"
print(f"Después de modificar: {frutas}")
Resultado de la ejecución:
Antes de modificar: ['Manzana', 'Plátano', 'Naranja']
Después de modificar: ['Manzana', 'Kiwi', 'Naranja']
Eliminar elementos (del)
Para eliminar un elemento especificando su índice, se utiliza la instrucción del.
frutas = ["Manzana", "Plátano", "Naranja", "Uva"]
print(f"Antes de eliminar: {frutas}")
# Eliminar el tercer elemento (índice 2)
del frutas[2]
print(f"Después de eliminar: {frutas}")
Resultado de la ejecución:
Antes de eliminar: ['Manzana', 'Plátano', 'Naranja', 'Uva']
Después de eliminar: ['Manzana', 'Plátano', 'Uva']
Obtener la longitud de una lista (len)
Para saber cuántos elementos hay en una lista, la función len() es muy útil. Se puede usar, por ejemplo, para mostrar el número total de artículos de un blog.
frutas = ["Manzana", "Plátano", "Naranja", "Uva"]
cantidad_elementos = len(frutas)
print(f"Hay {cantidad_elementos} elementos en la lista.")
Resultado de la ejecución:
Hay 4 elementos en la lista.
2. Los "Diccionarios": Gestionando con Claves y Valores
El siguiente que presentaremos es el "diccionario", una estructura de datos extremadamente potente y muy utilizada en el desarrollo web. Mientras que las listas gestionan los datos por su número (índice), los diccionarios los gestionan en pares de un nombre llamado "clave" y su correspondiente "valor".
Es como una agenda telefónica donde cada nombre (clave) está asociado a un número de teléfono (valor). Es ideal para cuando no te importa el orden y quieres acceder rápidamente a un valor a través de su clave. Es perfecto para gestionar información de miembros de un sitio web (nombre_usuario: "Juan", edad: 25...) o ajustes de configuración (color_tema: "#333", tamano_fuente: "16px"...).
Cómo crear un diccionario
Un diccionario se crea usando llaves {}, escribiendo los pares clave: valor separados por comas ,. Normalmente, se utilizan cadenas de texto para las claves.
# Crear información de usuario con un diccionario
usuario = {
"nombre": "Juan Pérez",
"edad": 30,
"email": "juan@example.com",
"es_admin": False
}
print(usuario)
Resultado de la ejecución:
{'nombre': 'Juan Pérez', 'edad': 30, 'email': 'juan@example.com', 'es_admin': False}
Acceder a los valores (por clave)
Para obtener un valor de un diccionario, se utiliza la "clave" en lugar del índice de una lista. Se escribe como nombre_diccionario[clave].
usuario = {
"nombre": "Juan Pérez",
"edad": 30,
"email": "juan@example.com"
}
# Obtener el valor correspondiente a la clave "nombre"
nombre_usuario = usuario["nombre"]
print(f"Nombre de usuario: {nombre_usuario}")
# Obtener el valor correspondiente a la clave "edad"
edad_usuario = usuario["edad"]
print(f"Edad: {edad_usuario}")
Resultado de la ejecución:
Nombre de usuario: Juan Pérez
Edad: 30
Añadir y actualizar valores
Añadir un nuevo par clave-valor a un diccionario o actualizar el valor de una clave existente es fácil. Si asignas un valor a una nueva clave, se añade; si la clave ya existe, se actualiza.
usuario = {
"nombre": "Juan Pérez",
"edad": 30
}
print(f"Antes de la operación: {usuario}")
# Añadir una nueva clave "ciudad"
usuario["ciudad"] = "Madrid"
print(f"Después de añadir: {usuario}")
# Actualizar el valor de la clave "edad"
usuario["edad"] = 31
print(f"Después de actualizar: {usuario}")
Resultado de la ejecución:
Antes de la operación: {'nombre': 'Juan Pérez', 'edad': 30}
Después de añadir: {'nombre': 'Juan Pérez', 'edad': 30, 'ciudad': 'Madrid'}
Después de actualizar: {'nombre': 'Juan Pérez', 'edad': 31, 'ciudad': 'Madrid'}
Eliminar elementos (del)
Al igual que con las listas, se puede eliminar un par clave-valor específico usando la instrucción del y la clave.
usuario = {
"nombre": "Juan Pérez",
"edad": 30,
"email": "juan@example.com"
}
print(f"Antes de eliminar: {usuario}")
# Eliminar la clave "email" y su valor correspondiente
del usuario["email"]
print(f"Después de eliminar: {usuario}")
Resultado de la ejecución:
Antes de eliminar: {'nombre': 'Juan Pérez', 'edad': 30, 'email': 'juan@example.com'}
Después de eliminar: {'nombre': 'Juan Pérez', 'edad': 30}
Obtener una lista de claves o valores
Si quieres obtener una lista de todas las claves o valores de un diccionario, métodos como keys(), values() e items() son muy útiles.
usuario = {
"nombre": "Juan Pérez",
"edad": 30,
"ciudad": "Madrid"
}
# Obtener todas las claves
print(f"Lista de claves: {usuario.keys()}")
# Obtener todos los valores
print(f"Lista de valores: {usuario.values()}")
# Obtener todos los pares clave-valor como una lista de tuplas
print(f"Pares clave-valor: {usuario.items()}")
Resultado de la ejecución:
Lista de claves: dict_keys(['nombre', 'edad', 'ciudad'])
Lista de valores: dict_values(['Juan Pérez', 30, 'Madrid'])
Pares clave-valor: dict_items([('nombre', 'Juan Pérez'), ('edad', 30), ('ciudad', 'Madrid')])
3. Caso práctico: ¡Generemos una página dinámica de productos con Python!
Combinando las listas y diccionarios que hemos aprendido, puedes realizar tareas muy prácticas. Aquí veremos un ejemplo de cómo gestionar una lista de productos de un sitio de comercio electrónico en Python y generar HTML a partir de ella. Este es el concepto fundamental detrás de lo que hacen internamente los frameworks web (como Django o Flask).
Primero, definimos los datos de los productos en Python como una "lista de diccionarios". Cada producto es un diccionario que contiene información como el nombre del producto, el precio y el nombre del archivo de imagen.
<!-- Este es un ejemplo de código Python que se ejecutaría en un servidor web para generar el HTML de abajo -->
#
# import html
#
# # Lista de datos de productos (cada producto es un diccionario)
# products = [
# {
# "name": "Camiseta de Algodón Orgánico",
# "price": 4500,
# "image": "tshirt.jpg",
# "description": "Una camiseta suave al tacto, 100% de algodón orgánico."
# },
# {
# "name": "Zapatillas de Lona",
# "price": 8200,
# "image": "sneakers.jpg",
# "description": "Las clásicas zapatillas de lona, fáciles de combinar con cualquier estilo."
# },
# {
# "name": "Mochila de Cuero",
# "price": 19800,
# "image": "backpack.jpg",
# "description": "Una mochila de cuero genuino que mejora con el tiempo."
# }
# ]
#
# # Generar el HTML
# html_content = ""
# for product in products:
# # No olvides escapar el HTML
# name_esc = html.escape(product["name"])
# desc_esc = html.escape(product["description"])
# img_esc = html.escape(product["image"])
#
# html_content += f"""
# <div class="product-card">
# <img src="images/{img_esc}" alt="{name_esc}">
# <h3>{name_esc}</h3>
# <p class="price">€{product['price']:,}</p>
# <p>{desc_esc}</p>
# </div>
# """
#
# # Este html_content se escribiría en un archivo o se pasaría a una plantilla de un framework web
# # print(html_content)
#
Al ejecutar el código Python anterior, se genera un código HTML como el siguiente. Si lo abres en un navegador, se mostrará la lista de productos. Esta idea de "separar los datos de la presentación" es la clave para una producción web eficiente.
👇Ejemplo de HTML completo y funcional👇
Copia el siguiente código, guárdalo con un nombre como productos.html y ábrelo en tu navegador. (※ Las imágenes no se mostrarán, pero podrás ver el diseño).
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lista de Productos</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
background-color: #f4f7f6;
color: #333;
margin: 0;
padding: 2rem;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
h1 {
text-align: center;
color: #2c3e50;
margin-bottom: 2rem;
}
.product-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
}
.product-card {
background-color: #fff;
border-radius: 8px;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
overflow: hidden;
transition: transform 0.3s, box-shadow 0.3s;
}
.product-card:hover {
transform: translateY(-5px);
box-shadow: 0 8px 25px rgba(0,0,0,0.15);
}
.product-card img {
width: 100%;
height: 200px;
object-fit: cover;
background-color: #eee;
}
.product-card h3 {
font-size: 1.25rem;
margin: 1rem 1.5rem 0.5rem;
color: #34495e;
}
.product-card .price {
font-size: 1.2rem;
font-weight: bold;
color: #e74c3c;
margin: 0 1.5rem;
}
.product-card p {
font-size: 0.95rem;
line-height: 1.6;
margin: 0.5rem 1.5rem 1.5rem;
color: #7f8c8d;
}
</style>
</head>
<body>
<div class="container">
<h1>Productos Recomendados</h1>
<div class="product-grid">
<div class="product-card">
<img src="images/tshirt.jpg" alt="Camiseta de Algodón Orgánico">
<h3>Camiseta de Algodón Orgánico</h3>
<p class="price">€4,500</p>
<p>Una camiseta suave al tacto, 100% de algodón orgánico.</p>
</div>
<div class="product-card">
<img src="images/sneakers.jpg" alt="Zapatillas de Lona">
<h3>Zapatillas de Lona</h3>
<p class="price">€8,200</p>
<p>Las clásicas zapatillas de lona, fáciles de combinar con cualquier estilo.</p>
</div>
<div class="product-card">
<img src="images/backpack.jpg" alt="Mochila de Cuero">
<h3>Mochila de Cuero</h3>
<p class="price">€19,800</p>
<p>Una mochila de cuero genuino que mejora con el tiempo.</p>
</div>
</div>
</div>
</body>
</html>
4. ¡Lo que marca la diferencia! Puntos a tener en cuenta y cómo elegir
Las listas y los diccionarios son muy útiles, pero hay algunos puntos que debes conocer. Entenderlos te ayudará a programar de forma más avanzada y a evitar errores inesperados.
Lista vs. Diccionario: ¿cómo decidir?
-
Cuándo usar una lista:
- Cuando el "orden" de los datos es importante (ej: clasificaciones, instrucciones paso a paso).
- Cuando quieres gestionar un simple conjunto de datos (ej: una lista de etiquetas, una lista de nombres de usuario).
-
Cuándo usar un diccionario:
- Cuando cada dato tiene un "significado" o "nombre" específico (ej: una clave 'nombre' para el nombre, 'edad' para la edad).
- Cuando quieres acceder rápidamente a un valor usando una clave específica.
Incluso en el contenido de un sitio web, te encontrarás usando de forma natural una lista para los elementos de un menú de navegación, donde el orden importa, y un diccionario para los ajustes generales del sitio, que quieres gestionar por "clave".
¡Cuidado al "copiar" una lista!
Esta es una de las trampas más comunes para principiantes. Si simplemente asignas una lista a otra variable con =, no se copia la lista en sí, sino la "ubicación (referencia)" de la lista. Como resultado, si cambias una, la otra también cambiará.
# Ejemplo de copia incorrecta
lista_a = [1, 2, 3]
lista_b = lista_a # ¡Esto no es una copia del contenido!
print(f"Antes del cambio: lista_a = {lista_a}, lista_b = {lista_b}")
# Si modificas lista_b...
lista_b.append(4)
# ¡Sorprendentemente, lista_a también cambia!
print(f"Después del cambio: lista_a = {lista_a}, lista_b = {lista_b}")
Resultado de la ejecución:
Antes del cambio: lista_a = [1, 2, 3], lista_b = [1, 2, 3]
Después del cambio: lista_a = [1, 2, 3, 4], lista_b = [1, 2, 3, 4]
Para evitar esto, utiliza el método copy() para crear una lista nueva y completamente independiente.
# Ejemplo de copia correcta
lista_a = [1, 2, 3]
lista_c = lista_a.copy() # Usar el método copy()
print(f"Antes del cambio: lista_a = {lista_a}, lista_c = {lista_c}")
# Aunque modifiques lista_c...
lista_c.append(4)
# ¡lista_a no se ve afectada!
print(f"Después del cambio: lista_a = {lista_a}, lista_c = {lista_c}")
Resultado de la ejecución:
Antes del cambio: lista_a = [1, 2, 3], lista_c = [1, 2, 3]
Después del cambio: lista_a = [1, 2, 3], lista_c = [1, 2, 3, 4]
5. ¡Y hay más! Otras colecciones útiles
Además de las listas y los diccionarios, Python tiene otras colecciones útiles. Aquí te presentamos brevemente dos de ellas.
Tuplas (Tuple)
Una tupla, en pocas palabras, es una "lista que no se puede modificar". Se crea cambiando los corchetes [] de una lista por paréntesis (). Una vez creada, no puedes añadir, modificar o eliminar elementos. Por eso, es adecuada para gestionar datos que no quieres que cambien durante la ejecución del programa, como las constantes.
# Definir un código de color RGB con una tupla
color_rojo = (255, 0, 0)
print(f"Valor RGB del rojo: {color_rojo}")
# Acceder al primer elemento
print(f"Valor R: {color_rojo[0]}")
# Intentar modificarla producirá un error
# color_rojo[0] = 200 # TypeError: 'tuple' object does not support item assignment
Resultado de la ejecución:
Valor RGB del rojo: (255, 0, 0)
Valor R: 255
Conjuntos (Set)
Un conjunto es una colección "sin orden y sin valores duplicados". Utiliza llaves {} como los diccionarios, pero solo almacena valores, no pares clave-valor. Su uso principal es eliminar elementos duplicados de una lista o encontrar elementos comunes o diferentes entre varias listas.
# Una lista con duplicados
numeros = [1, 2, 2, 3, 4, 4, 4, 5]
print(f"Lista original: {numeros}")
# Convertir a conjunto para eliminar duplicados
numeros_unicos = set(numeros)
print(f"Conjunto sin duplicados: {numeros_unicos}")
# Convertir de nuevo a lista
lista_unica = list(numeros_unicos)
print(f"Convertido de nuevo a lista: {lista_unica}")
Resultado de la ejecución:
Lista original: [1, 2, 2, 3, 4, 4, 4, 5]
Conjunto sin duplicados: {1, 2, 3, 4, 5}
Convertido de nuevo a lista: [1, 2, 3, 4, 5]
Resumen
En este artículo, hemos explicado el núcleo de las estructuras de datos de Python, las "listas" y los "diccionarios", desde su uso básico hasta ejemplos prácticos en la creación web.
- Lista
[]: Para conjuntos de datos donde el orden es importante. - Diccionario
{}: Para gestionar datos con significado mediante pares clave-valor. - Aplicación: Combinándolos, puedes crear fácilmente estructuras de datos para contenido web dinámico.
- Punto clave: Usa el método
copy()para copiar una lista.
Dominar estas colecciones mejorará drásticamente tu eficiencia de programación en Python. Especialmente en el mundo del desarrollo web, el flujo de trabajo básico consiste en tratar los datos obtenidos de una base de datos como listas o diccionarios para luego generar HTML. ¡Te animamos a que ejecutes el código de este artículo y sientas por ti mismo la diversión de manipular datos!
Siguiente paso:
Una vez que te sientas cómodo manejando datos, el siguiente paso es aprender a leer datos de archivos y guardar los resultados en ellos. El siguiente artículo lo explica en detalle.
Cómo Leer y Escribir Archivos en Python (E/S)