Listas y diccionarios anidados en Python: datos complejos
Esta lección es una traducción del original en inglés.Read in EnglishAvisar de un error de traducción
Piensa en una escuela. Una escuela tiene aulas. Cada aula tiene estudiantes. Cada estudiante tiene un nombre, una edad y una lista de notas. Son datos dentro de datos dentro de datos: datos anidados.
Los datos anidados están en todas partes en la programación real. Una red social guarda usuarios que tienen publicaciones, y cada publicación tiene comentarios. Un juego guarda niveles que contienen enemigos, y cada enemigo tiene sus estadísticas. Una tienda en línea tiene categorías con productos que tienen reseñas.
En este tutorial aprenderás a crear, leer, modificar y recorrer listas y diccionarios anidados. Son habilidades esenciales para trabajar con datos reales, sobre todo con el JSON que devuelven las API web.
¿Cómo funcionan las listas dentro de listas?
Una lista puede contener otras listas como elementos. Esto crea una estructura bidimensional, como una cuadrícula o una tabla. Piensa en una hoja de cálculo, con sus filas y columnas.
['X', 'O', 'X'] ['O', 'X', 'O'] ['X', ' ', 'O']
Para acceder a un elemento de una lista anidada, usas dos pares de corchetes. El primer corchete elige la fila. El segundo corchete elige la columna.
X X
También puedes modificar elementos con la misma sintaxis de doble corchete. Así es como colocarías una jugada en una partida de tres en raya.
['X', ' ', 'X'] [' ', 'O', ' '] [' ', ' ', ' ']
¿Cómo funcionan los diccionarios anidados?
El valor de un diccionario puede ser, a su vez, otro diccionario. Esto crea una estructura en forma de árbol en la que bajas de clave en clave hasta llegar a los datos que necesitas.
Ms. Smith 25
Cada par de corchetes baja un nivel más. school['Room 101'] te da el diccionario interno. Luego ['teacher'] te da el valor que hay dentro de ese diccionario interno.
También puedes añadir claves nuevas o actualizar valores en cualquier nivel.
Room 101: Ms. Smith teaches Algebra Room 103: Ms. Lee teaches Science
Listas de diccionarios: el patrón más común
La estructura anidada más común en la programación real es una lista de diccionarios. Cada diccionario representa un registro (un estudiante, un producto, un usuario) y la lista reúne todos los registros.
Si alguna vez has visto datos de una API web o de una base de datos, casi siempre tienen la forma de una lista de diccionarios.
Alice 97 Alice is 15 and scored 92 Bob is 16 and scored 85 Charlie is 15 and scored 97
El patrón siempre es list[index][key]. El índice elige el diccionario. La clave elige el valor dentro de ese diccionario.
Cómo acceder de forma segura a datos muy anidados
Los datos reales pueden tener varios niveles de anidación. Una empresa tiene departamentos, cada departamento tiene equipos y cada equipo tiene miembros. Para acceder a datos muy anidados, encadenas varios corchetes.
Alice Diana
El peligro de anidar mucho es que cualquier clave que falte provoca un KeyError. Si los datos pueden estar incompletos, usa el método .get(), que devuelve None (o un valor predeterminado) en vez de detener el programa con un error.
Python developer No site default
Cómo recorrer estructuras de datos anidadas
Cuando tienes datos anidados, a menudo necesitas bucles anidados. El bucle exterior recorre los elementos del nivel superior y el bucle interior recorre los elementos que hay dentro de cada uno.
Math: average = 87.5 English: average = 85.0 Science: average = 87.2
grid[0][0] = 1 grid[0][1] = 2 grid[0][2] = 3 grid[1][0] = 4 grid[1][1] = 5 grid[1][2] = 6 grid[2][0] = 7 grid[2][1] = 8 grid[2][2] = 9
Con las listas de diccionarios suele bastar un solo bucle, porque cada diccionario es un registro completo.
Laptop: $999 Phone: $699
Cómo crear estructuras de datos anidadas desde cero
No siempre recibes los datos anidados ya hechos: a veces tienes que construirlos tú. Un patrón común es empezar con una estructura vacía e ir añadiendo elementos dentro de un bucle.
a: ['apple', 'avocado'] b: ['banana', 'blueberry'] c: ['cherry', 'coconut']
Otra tarea común es convertir datos planos en estructuras anidadas. Por ejemplo, convertir una lista plana de puntuaciones en una lista de diccionarios.
{'name': 'Alice', 'age': 15, 'grade': 92}
{'name': 'Bob', 'age': 16, 'grade': 85}
{'name': 'Charlie', 'age': 15, 'grade': 97}Ejercicios de práctica
Tienes una cuadrícula de números de 3x3. Imprime el valor central (fila 1, columna 1) y después el valor de la esquina inferior derecha (fila 2, columna 2). Cada uno en una línea aparte.
Lee el código con atención. ¿Qué va a imprimir? Escribe la salida exacta.
Recorre la lista de estudiantes y encuentra al que tiene la nota más alta. Imprime su nombre y su nota con el formato: Best: Name (Grade)
Agrupa las palabras en un diccionario según su primera letra. Luego imprime cada grupo en una línea aparte con el formato: letter: [words]
Imprime las letras en orden alfabético.
Este código intenta crear una cuadrícula de 3x3 y poner "X" solo en la celda central. Pero algo falla: ¡ejecútalo y verás! Corrige el error para que solo la celda central sea "X" y todas las demás sigan siendo ".".
Imprime cada fila en una línea aparte.
Tienes un diccionario en el que cada clave es el nombre de una clase y cada valor es una lista de diccionarios de estudiantes. Calcula la nota promedio de cada clase e imprímela con el formato: ClassName: average
Redondea cada promedio a 1 decimal. Imprime las clases en orden alfabético.