SolveConPython

Python Reto #12 — Convertir una lista en un diccionario (índice → valor)

Nivel: Principiante
Tema: Listas, diccionarios, índices, bucles, enumerate, validación de entradas, tests con pytest
Objetivo: Convertir una lista en un diccionario donde cada clave sea el índice y cada valor sea el elemento correspondiente.

Reto #12 Convertir una lista en un diccionario (índice → valor)
Reto #12 Convertir una lista en un diccionario (índice → valor)

Enunciado

Crea una función llamada lista_a_diccionario(lista) que:

  1. Reciba un valor lista.
  2. Si lista es None, devuelva un diccionario vacío {}.
  3. Si lista no es una lista (list), lance TypeError.
  4. Devuelva un diccionario donde:
    • las claves sean los índices (empezando en 0),
    • los valores sean los elementos de la lista.
  5. Mantenga el orden natural de los índices.

Ejemplos

  • lista_a_diccionario(["a", "b", "c"]){0: "a", 1: "b", 2: "c"}
  • lista_a_diccionario([]){}
  • lista_a_diccionario(None){}
  • lista_a_diccionario("abc")TypeError

Pistas

  1. enumerate(lista) devuelve pares (índice, valor).
  2. Puedes crear el diccionario con un bucle o con una comprensión.
  3. Maneja los casos borde antes de recorrer la lista.

Solución explicada (paso a paso)

  1. Si la lista es None, no hay elementos → devolvemos {}.
  2. Si la entrada no es una lista, lanzamos TypeError.
  3. Creamos un diccionario vacío.
  4. Recorremos la lista usando enumerate para obtener índice y valor.
  5. Asignamos cada par al diccionario.
  6. Devolvemos el diccionario resultante.

Python
def lista_a_diccionario(lista: list | None) -> dict:
"""
Convierte una lista en un diccionario índice -> valor.
Reglas:
- None -> {}
- No list -> TypeError
- Índices empiezan en 0
"""
if lista is None:
return {}
if not isinstance(lista, list):
raise TypeError("El parámetro 'lista' debe ser una lista o None.")
resultado = {}
for indice, valor in enumerate(lista):
resultado[indice] = valor
return resultado

Python
import pytest
from reto_12_lista_a_diccionario import lista_a_diccionario
def test_lista_simple():
assert lista_a_diccionario(["a", "b", "c"]) == {
0: "a",
1: "b",
2: "c",
}
def test_lista_vacia():
assert lista_a_diccionario([]) == {}
def test_none_devuelve_diccionario_vacio():
assert lista_a_diccionario(None) == {}
def test_lista_con_valores_mixtos():
assert lista_a_diccionario([1, "a", None]) == {
0: 1,
1: "a",
2: None,
}
def test_tipo_incorrecto_lanza_typeerror():
with pytest.raises(TypeError):
lista_a_diccionario("abc")

Ejecuta:

  • pytest -q

Variantes para subir de nivel (opcional)

  1. Usar comprensión de diccionarios
  2. Soportar tuple además de list
  3. Invertir el mapeo: valor → índice
  4. Empezar índices en 1 (configurable)

Lo que aprendiste

  • Cómo usar enumerate correctamente
  • Conversión entre estructuras de datos
  • Validación clara de entradas
  • Tests para estructuras simples

Accede al código completo y a los tests en GitHub para ejecutar y modificar la solución localmente.

Con este reto completas los 12 retos de nivel Principiante.
El siguiente paso natural es Intermedio — Reto #13: Agrupar elementos por clave para empezar a trabajar con patrones reales de datos.