Skip to content
SISP Home
← Back to unit
CCPG1043 Unit 5

5.1 Diccionarios de un nivel

1. Crear, consultar y modificar

Un diccionario se escribe entre llaves. Cada par tiene la forma clave: valor.

estudiante = {
    "nombre": "Ana",
    "nota": 8.7,
    "aprobado": True
}

print(estudiante["nombre"])
estudiante["nota"] = 9.1
estudiante["paralelo"] = "A"

Las claves no se repiten. Asignar otro valor a una clave existente reemplaza el anterior. get permite consultar sin asumir que la clave existe:

ciudad = estudiante.get("ciudad", "No registrada")

Para saber si existe una clave:

if "nota" in estudiante:
    print(estudiante["nota"])

2. Recorrer pares clave-valor

items() entrega cada clave junto con su valor.

precios = {"cuaderno": 2.5, "lápiz": 0.5, "regla": 1.25}

for producto, precio in precios.items():
    print(producto, precio)

También existen keys() y values(), pero al recorrer directamente un diccionario se obtienen sus claves.

3. Conteo de frecuencias

El diccionario puede acumular cuántas veces aparece cada elemento.

palabras = ["datos", "python", "datos", "código", "python", "datos"]
frecuencias = {}

for palabra in palabras:
    frecuencias[palabra] = frecuencias.get(palabra, 0) + 1

print(frecuencias)

En cada repetición, get(palabra, 0) recupera el conteo existente o empieza en cero.

4. Crear desde listas

Dos listas alineadas pueden convertirse en un diccionario mediante sus posiciones.

codigos = ["MAT", "FIS", "PRO"]
creditos = [4, 4, 5]
materias = {}

for posicion, codigo in enumerate(codigos):
    materias[codigo] = creditos[posicion]

Antes de hacerlo, verifique que ambas listas tengan la misma longitud y que las futuras claves no se repitan. Si una clave aparece de nuevo, su valor anterior será reemplazado.

5. Crear desde una cadena

Cuando una cadena tiene un formato conocido, primero se separan sus registros y después sus campos.

texto = "agua=1.00;pan=0.60;fruta=0.80"
precios = {}

for registro in texto.split(";"):
    producto, precio = registro.split("=")
    precios[producto] = float(precio)

Este ejemplo supone que todos los registros respetan exactamente el formato nombre=precio.

6. Derivar y filtrar otro diccionario

Un nuevo diccionario puede construirse a partir de los pares de otro.

precios = {"cuaderno": 2.5, "lápiz": 0.5, "regla": 1.25}
precios_con_iva = {}

for producto, precio in precios.items():
    precios_con_iva[producto] = round(precio * 1.15, 2)

Para filtrar, se agrega el par únicamente cuando cumple la condición.

economicos = {}

for producto, precio in precios.items():
    if precio <= 1.50:
        economicos[producto] = precio

7. Una lista simple como valor

El alcance permite, como máximo, una lista simple como valor. Por ejemplo, materias por paralelo:

materias_por_paralelo = {
    "A": ["Fundamentos", "Cálculo"],
    "B": ["Fundamentos", "Física"]
}

Las listas contienen valores simples, no otros diccionarios ni más listas.

8. Invertir claves y valores

Invertir significa convertir los valores en claves.

codigos = {"Fundamentos": "CCPG1043", "Cálculo": "MATG1001"}
por_codigo = {}

for materia, codigo in codigos.items():
    por_codigo[codigo] = materia

La inversión directa es segura únicamente si los valores originales son únicos y pueden emplearse como claves. Si se repiten, ocurre una colisión:

paralelos = {"Ana": "A", "Luis": "B", "Marta": "A"}

Aquí el valor "A" corresponde a dos estudiantes. Una inversión directa conservaría solo el último. Si se requiere preservar todo, agrupe en listas simples:

estudiantes_por_paralelo = {}

for estudiante, paralelo in paralelos.items():
    if paralelo not in estudiantes_por_paralelo:
        estudiantes_por_paralelo[paralelo] = []
    estudiantes_por_paralelo[paralelo].append(estudiante)

Lista de control

  • ¿Cada clave representa un identificador único?
  • ¿El diccionario tiene un solo nivel?
  • ¿Las listas usadas como valores son simples?
  • ¿El formato de entrada desde una cadena está definido?
  • ¿Revisé valores repetidos antes de invertir?