3.2 Mapas (diccionarios)¶
Un mapa (o diccionario) guarda pares clave → valor. En lugar de buscar por posición, como en una lista, se busca por clave: dado un nombre, su edad; dada una palabra, cuántas veces aparece. Las claves son únicas: si asignas otra vez la misma clave, se sobrescribe el valor.
En Python es el diccionario dict: {"Ana": 25}. Conserva el orden de inserción. Las claves tienen que ser inmutables (texto, números, tuplas), no listas.
Crear, consultar, modificar y borrar¶
edades = {"Ana": 25, "Luis": 30}
print(f"edad de Ana: {edades['Ana']}")
print(f"Pepe: {edades.get('Pepe', 'no está')}")
print(f"Pepe con valor por defecto: {edades.get('Pepe', 0)}")
edades["Eva"] = 22 # añadir
edades["Ana"] = 26 # modificar
for clave, valor in edades.items():
print(f"{clave} -> {valor}")
del edades["Luis"]
print(f"tras borrar a Luis quedan {len(edades)}")
cuentas = {}
for palabra in "a b a c b a".split(" "):
cuentas[palabra] = cuentas.get(palabra, 0) + 1
print("frecuencias:")
for clave, valor in cuentas.items():
print(f"{clave} -> {valor}")
Salida:
edad de Ana: 25
Pepe: no está
Pepe con valor por defecto: 0
Ana -> 26
Luis -> 30
Eva -> 22
tras borrar a Luis quedan 2
frecuencias:
a -> 3
b -> 2
c -> 1
| Operación | En Python |
|---|---|
| Consultar (error si no está) | edades["Ana"] → KeyError si falta |
| Consulta segura / valor por defecto | edades.get("Pepe", 0) |
| Añadir o modificar | edades["Eva"] = 22 |
| ¿Existe la clave? | "Ana" in edades |
| Borrar | del edades["Luis"] · edades.pop("Luis") |
| Tamaño | len(edades) |
| Solo claves · solo valores | edades.keys() · edades.values() |
| Recorrer pares | for clave, valor in edades.items(): |
Consultar una clave que no existe
Consultar con corchetes una clave que no existe lanza KeyError. Si la clave puede no estar, usa get(clave, valor_por_defecto) o comprueba antes con in.
Contar con un mapa¶
La segunda mitad del ejemplo es un patrón que se usa constantemente: contar cuántas veces aparece cada elemento. Para cada palabra, se lee su cuenta actual (o 0 si es la primera vez), se suma 1 y se guarda de nuevo.
Claves, valores y mapas de listas¶
notas = {
"Ana": [7, 9],
"Luis": [5, 6, 7],
}
print("claves: " + ", ".join(notas.keys()))
for nombre, lista in notas.items():
suma = 0
for n in lista:
suma += n
print(f"{nombre}: media {suma / len(lista)}")
print(f"total de notas: {sum(len(lista) for lista in notas.values())}")
Salida:
claves: Ana, Luis
Ana: media 8.0
Luis: media 6.0
total de notas: 5
Los valores pueden ser de cualquier tipo, incluidas listas u otros mapas. Aquí cada alumno tiene una lista de notas; se recorre el mapa y, para cada par, se recorre su lista.
¿Mapa, lista o conjunto?¶
| Necesito... | Estructura |
|---|---|
| Datos ordenados a los que accedo por posición | Lista |
| Buscar un dato a partir de otro (nombre → edad) | Mapa |
| Saber si algo está, sin repeticiones | Conjunto |
Errores frecuentes¶
| Error | Cómo evitarlo |
|---|---|
| Usar el valor de una clave que no existe | Comprueba, o usa el valor por defecto |
| Esperar un orden concreto | Usa una versión ordenada si el orden importa |
| Modificar el mapa mientras lo recorres | Recorre una copia de las claves o construye un mapa nuevo |
| Repetir una clave pensando que añade otra entrada | Las claves son únicas: la segunda sobrescribe |
Para practicar¶
Haz los ejercicios 3.2 de mapas. Y para ver cómo se escribe en otro lenguaje: Pasar de uno a otro.