Llenar un diccionario usando bucles for (python) [duplicate]

2 minutos de lectura

avatar de usuario
Halcyon Abraham Ramírez

Estoy tratando de crear un diccionario usando bucles for. Aquí está mi código:

dicts = {}
keys = range(4)
values = ["Hi", "I", "am", "John"]
for i in keys:
    for x in values:
        dicts[i] = x
print(dicts)

Esto da como resultado:

{0: 'John', 1: 'John', 2: 'John', 3: 'John'}

¿Por qué?

Estaba planeando hacerlo salir:

{0: 'Hi', 1: 'I', 2: 'am', 3: 'John'}

¿Por qué no sale de esa manera y cómo hacemos que salga correctamente?

  • agregue una declaración de impresión en el segundo ciclo for

    – Ajay

    16 mayo 2015 a las 21:20

  • Intenté que la salida siguiera siendo la misma.

    – Halcyon Abraham Ramírez

    16 mayo 2015 a las 21:29

  • revisa la respuesta que di

    – Ajay

    16 mayo 2015 a las 21:30

dicts = {}
keys = range(4)
values = ["Hi", "I", "am", "John"]
for i in keys:
        dicts[i] = values[i]
print(dicts)

alternativamente

In [7]: dict(list(enumerate(values)))
Out[7]: {0: 'Hi', 1: 'I', 2: 'am', 3: 'John'}

  • gracias por tu respuesta Es interesante. porque enumerar también da números, ¿verdad? Frío

    – Halcyon Abraham Ramírez

    16 mayo 2015 a las 21:32

  • Me pregunto, dado que su respuesta tiene más votos, ¿hay alguna razón por la que uno prefiera su respuesta alternativa a la respuesta dict (zip ()) a continuación? ¿Hay alguna diferencia real en el tiempo de ejecución, o dado que zip es un tipo especial de enumeración, todo se reduce a si queremos que las claves dict. sean números enteros o cadenas?

    – pmackni

    18 de enero de 2021 a las 16:24

>>> dict(zip(keys, values))
{0: 'Hi', 1: 'I', 2: 'am', 3: 'John'}

  • esto parece tan simple que me avergüenzo de los bucles for que hice. Muchísimas gracias

    – Halcyon Abraham Ramírez

    16 mayo 2015 a las 21:33

  • bueno, asume que las claves y los valores están correctamente asociados por los mismos índices… Supongo que el ciclo for también asume esto, pero es un poco más flexible

    – 3 hoyos

    10 de enero de 2018 a las 17:41

  • @MikePalmice: la documentación de Python garantiza que este es el caso siempre que el diccionario no esté mutado en el medio.

    – Ignacio Vázquez-Abrams

    10 de enero de 2018 a las 17:42

  • Perfecto, me ayudó en mi proyecto. Muchas gracias señor.

    – Marek Ševela

    3 de junio de 2021 a las 14:12

¿Ha sido útil esta solución?