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.

Enunciado
Crea una función llamada lista_a_diccionario(lista) que:
- Reciba un valor
lista. - Si
listaesNone, devuelva un diccionario vacío{}. - Si
listano es una lista (list), lanceTypeError. - Devuelva un diccionario donde:
- las claves sean los índices (empezando en 0),
- los valores sean los elementos de la lista.
- 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
enumerate(lista)devuelve pares(índice, valor).- Puedes crear el diccionario con un bucle o con una comprensión.
- Maneja los casos borde antes de recorrer la lista.
Solución explicada (paso a paso)
- Si la lista es
None, no hay elementos → devolvemos{}. - Si la entrada no es una lista, lanzamos
TypeError. - Creamos un diccionario vacío.
- Recorremos la lista usando
enumeratepara obtener índice y valor. - Asignamos cada par al diccionario.
- 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 pytestfrom reto_12_lista_a_diccionario import lista_a_diccionariodef 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)
- Usar comprensión de diccionarios
- Soportar
tupleademás delist - Invertir el mapeo: valor → índice
- Empezar índices en 1 (configurable)
Lo que aprendiste
- Cómo usar
enumeratecorrectamente - 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.