No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Dictionary Comprehension

7/44
Recursos

Aportes 140

Preguntas 14

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Comparto otra forma de resolver el último ejercicio:

names = ['nico', 'zule', "santi"]
edades = [12,56,98]
new_dict = {names[i]:edades[i] for i in range(len(names))}

Comparto método clásico y dictionary comprehension con dos métodos:

names = ['Nico','Zule','Santi']
ages = [12,56,98]
  • classical method
dict = {}
for i in range(len(names)):
  dict[names[i]] = ages[i]
  • Dictionary Comprehension
dict_2 = {names[i] : ages[i] for i in range(len(names))}
  • Dictionary Comprehension (explicado en clase)
new_dict = {name: age for (name, age) in zip(names, ages)}

Revisando los comentarios para las personas que usan una iteracion con len estan asumiendo que las 2 listas contiene la misma cantidad de elementos. y para este caso especifico el output es correcto.

como obervacion: y que pasa si una lista tiene un elemento mas o menos que la otra, con la iteraciones de indices de las 2 lista se rompe el programa por el error IndexError: list index out of range, por que un elemento no tiene un indice homologo en la otra lista, espero hay sido claro.

para mi gusto la mejor manera es usar la funcion zip ya que ese elemento que no tiene pareja la omite y solo une las listas con los elementos con indices iguales.

el primera instancia eso me ahorraria mucha logica tratando ese error de los indices.

tengo la duda de porque no lo hizo directamente de esta forma pero les dejo el dato que se puede hacer directamente

names = ['nico', 'zule', 'santi']
ages = [12, 56, 98]
print (dict(zip(names, ages)))

Dict comprehensions

  • Los Dictionary comprehensions -o Dict comprehensions para abreviar- son estructuras semejantes a las vistas pero, tal y como indica su nombre, generan diccionarios. Un ejemplo es el siguiente:
cities = ["Madrid", "Barcelona", "Milán", "Santander"]

{c: len(c) for c in cities}

{'Madrid': 6, 'Barcelona': 9, 'Milán': 5, 'Santander': 9}
  • En este ejemplo hemos hecho referencia a una única lista, pero no tiene por qué ser así:
cities = ["Madrid", "Barcelona", "Milán", "Santander"]
years = [2017, 2018, 2019, 2020]

{c: y for c in cities for y in years}

{'Madrid': 2020, 'Barcelona': 2020, 'Milán': 2020, 'Santander': 2020}
  • Obsérvese que, en este caso, también se está simulando el mismo bucle for anidado que ya hemos visto:
d = {}
for c in cities:
    for y in years:
        d.update({c: y})
d

{'Madrid': 2020, 'Barcelona': 2020, 'Milán': 2020, 'Santander': 2020}

  • Solo subsisten cuatro parejas clave-valor (en lugar de 16) pues ya sabemos que en un diccionario no puede haber claves repetidas, por lo que para cada valor c se recorren todos los años en la variable “y” y se va sobrescribiendo el valor que pueda existir para la clave c.

  • Si quisiéramos obtener un diccionario que relacionase cada par de valores de cities y years, podríamos hacerlo con la función zip:

{c: y for c, y in zip(cities, years)}

{'Madrid': 2017, 'Barcelona': 2018, 'Milán': 2019, 'Santander': 2020}

Hice tanto la explicacion de la clase como la solucion que dieron algunos compañeros y ambos codigos tienen exactamente el mismo output

<code> 
names = ['nico','zule','santi']
ages = [12, 56, 98]

dict2=dict(zip(names,ages))
print(dict2)

new_dict = {name:age for (name,age) in zip(names,ages)}
print(new_dict)

Hola platzi comunity, este tema no me fue fácil y decidí hacer un código de rutinas de ejercicios. Esto me ayudo a entender mejor el concepto y la base de la formulación, así como:
La llave de un diccionario, es inmutable y su valor no puede ser lista sino de una tupla.

Grandioso curso la verdad hace que se comprenda todo lo que se quiere lograr por que comienzas de lo simple o lo que ya se conoce a lo complejo por decirlo de alguna forma.

que hace que lo complejo se vuelva fácil

#iteracion con base en dos listas

names = ['Luis','Maria','Jose','Pedro','Juan','Pablo','Luisa','Marta','Sofia','Camila','Andrea','Sara']

ages = [random.randint(1,100) for edad in range(len(names))] #se crea una lista con numeros aleatorios entre 1 y 100, la lista tiene la misma longitud que la lista de nombres
print(ages)

#tenemos dos listas, una con nombres y otra con edades, queremos crear un diccionario con los nombres como llaves y las edades como valores.
#el algoritmo seria: para cada nombre en la lista de nombres, se agrega al diccionario con su llave correspondiente, y el valor de la llave es la edad correspondiente en la lista de edades.

print(list(zip(names, ages))) #se crea una lista de tuplas con los nombres y las edades, zip ayuda a unir dos listas en una lista de tuplas

people = {name: age for (name, age) in zip(names, ages)} # se lee: para cada nombre en la lista de nombres, se agrega al diccionario con su llave correspondiente, y el valor de la llave es la edad correspondiente en la lista de edades.
print(people)

para el ejemplo de la clase también funciona de la siguiente forma

names=['nico', 'zule', 'santi']
ages=[12, 34, 56]

dict2=dict(zip(names,ages))
print(dict2)

ZIP, Permite unir dos tuplas:

a = ("Bolivia", "Peru", "Colombia")
b = ("Boliviano", "Sol", "Peso")

x = zip(a, b)
for i in x:
  print(i)

Salida

('Bolivia', 'Boliviano')
('Peru', 'Sol')
('Colombia', 'Peso')

Quiero compartir una funcion que ayuda a ver de forma visual el diccionario

def printDic(data):
    print("key:value")
    # for element in data:
    #     print(element, ':', data[element])
    for key,value in data.items():
        print(f' {key} : {value}')


dict = {}
for element in range(1, 11):
    dict[element] = element*2
# print(dict)
printDic(dict)

'''
key:value
 1 : 2
 2 : 4
 3 : 6
 4 : 8
 5 : 10
 6 : 12
 7 : 14
 8 : 16
 9 : 18
 10 : 20
'''

Tambien se puede crear un diccionario de esta forma
names=[‘nico’,‘zule’,'santi]
ages=[12,56,98]
new_dict=dict(zip(names, ages)

'''
dict = {}
for i in range(1,5):
  dict[i] = i *2

print(dict)

dict_2 = {i:i *2 for i in range(1,5)}
print(dict_2)

import random
con = ['col','mex','bol','pe']
pobla ={}
for cont in con:
  pobla[cont] = random.randint(1,100)

print(pobla)

pobla_2 ={cont: random.randint(1,100) for cont in con}
print(pobla_2)
'''
name = ['nico','zoro','sanji']
age = [30,21,21]

print(list(zip(name, age)))

new_dict = {name: age for (name,age)in zip(name,age)}
print(new_dict)

ME ENCANTO!! La verdad es que Nicolás es un GRAN docente:

import random

dic_v1 = {}

for i in range(1,11):
  dic_v1[i] = i * 2

print(dic_v1)

dic_v2 = {i: i * 2 for i in range(1,11)}
print(dic_v2)


contries_mercosur = ['ar','br','pr','uy']
population = {}
for i in contries_mercosur:
  population[i] = random.randint(3,220)
print(population)

pop_v2 = {i: random.randint(3,220) for i in contries_mercosur}
print(pop_v2)

names = ['pedro','marcelo','cacho']
ages = [21,54,35]

print(list(zip(names,ages)))

new_dic = {names: ages for (names,ages) in zip(names,ages)}
print(new_dic)

Comparto los ejercicios de la clase pero con mis notas para comprender más tarde que se hizo o como funciona

<#Creo una variable diccionario diccionario
"""dict = {}"""

#Indico en el codigo que mi |key| va a ser el rango establecido en el ciclo |for| y le voy a agregar el valor a la key el cada ciclo indicandole que en cada espacio de la |key| quiero el valor del elemento multiplicado por 2
"""for i in range(1, 5):
  dict[i] = i * 2

print(dict)"""

#Creo un diccionario e indico que quiero que el elemento (en este caso denotado por la letra |i|) sea la |key| y el valor de la |key| va a ser el doble del valor introducido en esta, estos valores se obtienen de ciclo for, en el cual indicamos que el valor en la |key| va a estar establecido por un |range|
"""dict_v2 = {i: i * 2 for i in range(1, 5)}
print(dict_v2)"""

#Generamos un diccionario a partir de una lista

#Importo ña utilidad random para agregar un numero aleatorio más adelante
"""import random"""
#Establecemos una lista con los paises
"""countries = ["col", "mex", "bol", "pe"]"""

#Creamos la variable que va a ser un diccionario
"""population = {}"""

#Iteramos cada uno de los paises dentro de la lista de paises

"""for country in countries:"""
  #Agrego al diccionario, basado en el pais, un número aleatorio llamando a la utilidad random estableciendo un rango en especifico, este numero debe de ser un entero

   #"""population[country] = random.randint(1, 100)"""

"""print(population)"""

#Ejercicio utilizando el dictionari comprehension

#Donde nuestro diccionario esta constituido por la |key| country cuyo valor es un numero aleatorio y entero dentro del rango 1 a 100, los cuales obtendremos de un ciclo |for| sacando los valores de la lista |countries|
"""population_v2 = {country: random.randint(1,100) for country in countries}

print(population_v2)"""

#Ejercicio de iterar 2 listas y con ellas generar un diccionario

names = ["apolo", "artemisa", "hermes"]
ages= [12, 56, 98]

#Para unir una lista con otra se utiliza la función |zip|, pero, si la usamos así sin más nos arroja una referencia, para que el resultado sea una lista, para que arroje una lista hay que convertirla a lista con la función |list|
print(list(zip(names, ages)))

#Agregamos un par clave valor (|key|: |value|) al diccionario que este par |key| |value| nombre y edad viene de iterar un iterable que es una lista con tuplas y esto se obtiene de las listas de nombre y edades
new_dict = {name: age for (name, age) in zip(names, ages)}

#Como resultado aparece un diccionario con los pares |key| y |value| que se obtuvieron de las dos listas
print(new_dict)> 
We can use the same but instead of list we can try with dict and that was all ```js print(dict(zip(countries,currency))) ```

este error me hizo trasnochar :
TypeError: ‘dict’ object is not callable
al ejecutar

names = ['nico', 'zule', 'zoe']
ages = [12, 56, 90]

# print(dict(zip(names, ages))) or
my_dict = dict(zip(names, ages))
print(my_dict)

por alguna extraña razón en una terminal me da error y en otra no. no se si sea tema de librerias instaldas o que.

👀Les dejo mi aporte que según mi punto es el mejor y más sencillo:
En seguida les explico que se hizo ✔

diccionario = {k: v for k, v in zip(names, ages)} 

En este ejemplo, ‘k’ y ‘v’ son variables que se utilizan para iterar sobre los elementos de las listas claves y valores (Lo que posee un diccionario). El dictionary comprehension asigna a cada elemento de la lista claves (que se almacena en la variable k) su elemento correspondiente de la lista valores (que se almacena en la variable v).

Antes de eso recordemos la sintaxis de la comprensión de diccionarios:

{key_expression: value_expression for item in iterable} 

En este caso, key_expression es k y value_expression es v. Al iterar sobre los elementos de las listas claves y valores con la función zip(), se obtiene una secuencia de tuplas, donde cada tupla contiene un elemento de cada lista. Por ejemplo, la primera tupla sería (‘nico’, 12), la segunda tupla sería (‘zule’, 56), y así sucesivamente. Al asignar cada elemento de la tupla a la variable k y v, se puede utilizar esta información para crear el diccionario.

Este es un poco mas complicado abordar pero, vamos a lo simple para entender lo complejo.

Los diccionary comprehension son parte de la estructura de datos avanzadas que lo que hace es crear un diccionario con un resultado segun lo que contenga.

operacion = {}

for i in range(1,10):
    operacion[i] = i*2
print(operacion)

esta misma linea de codigo, puedes escribirla asi:


operacion = {i:i*2 for i in range(1,10)}

print(operacion)

Si te preguntas, esto para que es util, puedes verlo como una manera mas avanzada para tu codigo, ahorro en la linea y ademas es enriquecimiento en la linea de codigo.

Hay otras formas para llegar al mismo resultado, entre ellas esta la siguiente:

names = ['nico', 'zule', "santi"]
ages = [12,56,98]

# Opcion 1
new_dict = {}
for i in range(len(names)):
    item = names[i]
    new_dict[item] = ages[i]  
print(new_dict)

# Opcion 2
new_dict = {names[i] : ages[i] for i in range(len(names))}
print(new_dict)  

Con " range(len(names) " extraemos el numero de veces que se debe iterar.

Gente, les dejo otra forma de hacer lo ultimo.
Nuestro iterador va a ser la lista de “names” y el elemento dinamico seria el indice de esta misma lista. Al sacar el tamaño de la lista con “len” y tenerlo dentro del “range()” estamos iterando en un rango de 0-2 (range(3) sin incluir el 3). De esta forma tomaria el primer indice de ambas listas y las acomodaria en el diccionario. La limitante de esto es que deben de ser del mismo tamaño ambas listas.

names = ['nico', 'zule', 'santi']
ages = [12, 56, 98]

people_v3 = {names[i]: ages[i] for i in range(len(names))]
print(people_v3)

Comparto 3 maneras de unir las dos listas en un Dict

# Generate a dictionary in a single line of code
ani = ['conejo', 'pez', 'sapo', 'perro', 'gato', 'tigre']
nums = [nums+1 for nums in range(len(ani))]
nw_dic = {nums[i]: ani[i] for i in range(len(ani))}
nwdic_O = {nums[i]: ani[i] for i in range(len(ani)) if 'o' in ani[i]}

if __name__ == "__main__":
    print("Dictionary\n\t", nw_dic)
    print("Animals with 'o'\n\t", nwdic_O)

Investigando pude encontrar que podemos incluir mas de 2 listas, en este caso voy a tener 3 listas, las cuales me contienen los siguientes datos:

names = {"pedro", "andres", "carlos"}
ages = {21, 35, 40}
countrie = {"col", "mex", "arg"}

Ahora si vamos a print podemos obtenemos el siguiente resultado:

print(set(zip(names, ages, countrie)))
{('andres', 40, 'col'), ('pedro', 21, 'arg'), ('carlos', 35, 'mex')}

Pero al momento de utilizar dictionary comprehension, encontramos que zip() nos permite comprimir 3 listas y realizar operaciones más representativas.

for names, ages, countrie in zip(names, ages, countrie):
  print(f"Su nombre es {names} tiene {ages} y vive en {countrie}")

Obtenemos:

Su nombre es andres tiene 40 y vive en col
Su nombre es carlos tiene 35 y vive en mex
Su nombre es pedro tiene 21 y vive en arg

Comparto el articulo de las funciones de zip()

Estan geniales los Dictionary Comprenhensions!

```python names = ['John', 'Jane', 'Doe', 'Alice', 'Bob'] ages = [random.randint(18, 65) for _ in names] people = {name: age for name, age in zip(names, ages)} print(people) # using dictionary comprehension with condition people = {name: age for name, age in zip(names, ages) if age >= 21} print(people) ```names = \['John', 'Jane', 'Doe', 'Alice', 'Bob']ages = \[random.randint(18, 65) for \_ in names] people = {name: age for name, age in zip(names, ages)}print(people) \# using dictionary comprehension with conditionpeople = {name: age for name, age in zip(names, ages) if age >= 21}print(people)
`comparto la forma en que hice el ultimo ejercicio:` ```js names = ['nico', 'zule', 'santi'] ages = [12, 56, 98] dict = {name:ages[names.index(name)] for name in names} print(dict) ```
`Esta es la forma en que resolvi el ultimo ejercicio hice:` ```js names = ['nico', 'zule', 'santi'] ages = [12, 56, 98] dict = {name:ages[names.index(name)] for name in names} print(dict) ```
Si una lista es más grande que la otra, la función `zip` empareja elementos hasta que se quede sin elementos en la lista más corta. No produce un error, pero los elementos sobrantes de la lista más larga se ignoran. ```python students = ['lucia', 'ramiro', 'lucinda', 'mariana'] notes = [56, 34, 90] new_dict = dict(zip(students, notes)) print(new_dict) ```students = \['*lucia*', '*ramiro*', '*lucinda*', '*mariana*']notes = \[56, 34, 90]new\_dict = dict(zip(students, notes))print(new\_dict)
Si una lista es más grande que la otra, la función `zip` empareja elementos hasta que se quede sin elementos en la lista más corta. No produce un error, pero los elementos sobrantes de la lista más larga se ignoran. ```js ```
Si una lista es más grande que la otra, la función `zip` empareja elementos hasta que se quede sin elementos en la lista más corta. No produce un error, pero los elementos sobrantes de la lista más larga se ignoran.```python a ```
Si una lista es más grande que la otra, la función `zip` empareja elementos hasta que se quede sin elementos en la lista más corta. No produce un error, pero los elementos sobrantes de la lista más larga se ignoran. ```python students = ['lucia', 'ramiro', 'lucinda', 'mariana'] notes = [56, 34, 90] new_dict = dict(zip(students, notes)) print(new_dict ```students = \['*lucia*', '*ramiro*', '*lucinda*', '*mariana*']notes = \[56, 34, 90]new\_dict = dict(zip(students, notes))print(new\_dict)
Si una lista es más grande que la otra, la función `zip` empareja elementos hasta que se quede sin elementos en la lista más corta. No produce un error, pero los elementos sobrantes de la lista más larga se ignoran. ```python students = ['lucia', 'ramiro', 'lucinda', 'mariana'] notes = [56, 34, 90] new_dict = dict(zip(students, notes)) print(new_dict) ```students = \['lucia', 'ramiro', 'lucinda', 'mariana'] notes = \[56, 34, 90] new\_dict = dict(zip(students, notes)) print(new\_dict)
Si una lista es más grande que la otra, la función `zip` empareja elementos hasta que se quede sin elementos en la lista más corta. No produce un error, pero los elementos sobrantes de la lista más larga se ignoran. ```python students = ['lucia', 'ramiro', 'lucinda', 'mariana'] notes = [56, 34, 90] new_dict = dict(zip(students, notes)) print(new_dict) ```students = \['lucia', 'ramiro', 'lucinda', 'mariana'] notes = \[56, 34, 90] new\_dict = dict(zip(students, notes)) print(new\_dict)
Si tienen dudas cuando una lista es mas grande que otra. La función `zip` empareja elementos hasta que se quede sin elementos en la lista más corta. No produce un error, pero los elementos sobrantes de la lista más larga se ignoran. ```js students = ['lucia', 'ramiro', 'lucinda', 'mariana'] notes = [56, 34, 90] new_dict = dict(zip(students, notes)) print(new_dict) ````students = ['lucia', 'ramiro', 'lucinda', 'mariana']` `notes = [56, 34, 90]` `new_dict = dict(zip(students, notes))` `print(new_dict)` se ignora 'mariana' el elemento sobrante
Si tienen dudas cuando una lista es mas grande que otra. La función `zip` empareja elementos hasta que se quede sin elementos en la lista más corta. No produce un error, pero los elementos sobrantes de la lista más larga se ignoran. `students = ['lucia', 'ramiro', 'lucinda', 'mariana']` `notes = [56, 34, 90]` `new_dict = dict(zip(students, notes))` `print(new_dict)` se ignora 'mariana' el elemento sobrante
Dictionary comprehension ofrece una sintaxis más corta cuando desea crear un nuevo diccionario basado en los valores de una lista existente. repositorio <https://github.com/angel20125/python-2-comprehension-functions-2024> ![](https://static.platzi.com/media/user_upload/clase-7-dict-comprehension-0cc14d67-054b-4e53-bb52-af039620da60.jpg)
**DICTIONARY COMPREHENSION** **Sintaxis básica:** La comprensión de diccionarios en Python tiene una sintaxis muy específica.  Se ve así: **{key\_expression: value\_expression for item in iterable}**. Aquí, key\_expression y value\_expression son cualquier operación válida de Python que se realiza en cada item del iterable. \# Lista original original\_list = \[1, 2, 3, 4, 5] \# Usando comprensión de diccionarios para crear un nuevo diccionario que contiene los números de la lista original como claves y sus cuadrados como valores squares = {num: num\*\*2 for num in original\_list} print(squares)  # Salida: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25} \# En este ejemplo, num: num\*\*2 es la expresión y for num in original\_list es el iterable. **Condicionales:** Puedes agregar condicionales al final de la expresión para filtrar elementos.  Por ejemplo: **{key\_expression: value\_expression for item in iterable if condition}.** \# Crear un diccionario con números del 1 al 10 como claves y sus cuadrados como valores solo si el número es par squares = {num: num\*\*2 for num in range(1, 11) if num % 2 == 0} print(squares)  # Salida: {2: 4, 4: 16, 6: 36, 8: 64, 10: 100} **If-Else en la expresión:** Puedes usar un if-else en la expresión para decidir qué valor tomar.  Por ejemplo: **{key\_expression: (value\_expression1 if condition else value\_expression2) for item in iterable}.** \# Crear un diccionario con números del 1 al 10 como claves y 'par' o 'impar' como valores parity = {num: ('par' if num % 2 == 0 else 'impar') for num in range(1, 11)} print(parity)  # Salida: {1: 'impar', 2: 'par', 3: 'impar', 4: 'par', 5: 'impar', 6: 'par', 7: 'impar', 8: 'par', 9: 'impar', 10: 'par'} **Bucles anidados:** Puedes anidar múltiples bucles.  Por ejemplo: **{key\_expression: value\_expression for item1 in iterable1 for item2 in iterable2}.** \# Crear un diccionario con pares de números del 1 al 3 como claves y sus sumas como valores sums = {(num1, num2): num1 + num2 for num1 in range(1, 4) for num2 in range(1, 4)} print(sums)  # Salida: {(1, 1): 2, (1, 2): 3, (1, 3): 4, (2, 1): 3, (2, 2): 4, (2, 3): 5, (3, 1): 4, (3, 2): 5, (3, 3): 6} **Evita los diccionarios largos:** Las comprensiones de diccionarios son geniales, pero pueden consumir mucha memoria si el diccionario es muy largo. En esos casos, es mejor usar un generador. **Legibilidad:** Aunque las comprensiones de diccionarios pueden hacer mucho en una sola línea, a veces puede ser mejor dividir las cosas en varias líneas para mejorar la legibilidad.
list Comprenhension nos da las posibilidades de manipular los datos como en el ejemplo que puso el profesor, algo parecido realice en este ejercicio. Teniendo dos listas: empleados = \[ 'Roger Fedreer', 'Franckie Ruiz', 'Filipe Petit', 'Morgan Freeman' ] cargos = \['Tenista', 'Cantante Salsero', 'Equilibrista', 'Actor'] para unir esas dos en un diccionario: new\_dict = { empleados: cargos for (empleados, cargos) in zip(empleados, cargos) } print(new\_dict) \--------- resultado------------------- ![](https://static.platzi.com/media/user_upload/Captura%20desde%202024-05-27%2013-04-34-2fb2be61-99db-4e53-97db-ffcecf71410e.jpg)
We can use dict insted of list to create the same result with zip, here my solution: ```python print(dict(zip(names,ages))) ```print(dict(zip(countries,currency)))
la funcion zip hace una union entre una lista y otra
yo lo resolvi asi ```js nombre = ['juan','pedro', 'luis', 'pablo', 'ramon'] edad = [23, 45, 53, 12, 34] edad2 ={i : edad[nombre.index(i)] for i in nombre} print(edad2) ```
Otra forma:```python # Imprimir el diccionario diccionario = {edad: nombre for (edad, nombre) in zip(nombres, edades)} print(diccionario) # El diccionario debe tener como clave el nombre y como valor la edad. dict2 = dict(zip(nombres, edades)) print(dict2) ```# Imprimir el diccionario diccionario = {edad: nombre for (edad, nombre) in zip(nombres, edades)} print(diccionario) \# El diccionario debe tener como clave el nombre y como valor la edad. dict2 = dict(zip(nombres, edades)) print(dict2)
Otra forma de ````js # Imprimir el diccionario diccionario = {edad: nombre for (edad, nombre) in zip(nombres, edades)} print(diccionario) # El diccionario debe tener como clave el nombre y como valor la edad. dict2 = dict(zip(nombres, edades)) print(dict2) ```# Imprimir el diccionario diccionario = {edad: nombre for (edad, nombre) in zip(nombres, edades)} print(diccionario) \# El diccionario debe tener como clave el nombre y como valor la edad. dict2 = dict(zip(nombres, edades)) print(dict2) ````
```python """Me llamo mucho el concepto de Zip y que era lo que salía sin usar la función list() agrego mis notas personales. Saludos""" # Definir una lista de nombres nombres = ["Juan", "Ramón"] # Definir una lista de edades edades = [18, 23] # Imprimir la lista de nombres print(nombres) # Imprimir la lista de edades print(edades) # Crear una lista de tuplas utilizando la función zip con las edades y nombres print(list(zip(edades, nombres))) # Comentar qué pasaría si no usáramos la función list(), se imprimiría un objeto zip, que es un iterador, en lugar de una lista de tuplas. ```
```python ''' dict = {}#se crea un diccionario vacio for i in range(1, 5):#se crea un ciclo para recore la lista del 1 al 5 dict[i] = i * 2#se agrega a la lista el resultado de multiplicador por 2 print(dict) dict_v2 = { i: i * 2 for i in range(1, 5)}# asi es mas faci de acer el diccionario print(dict_v2) import random#se importa la libreria ramdon countries = ['col', 'mex','bol','pe']#se crea una lista con los paises population = {}#se crea un diccionario vacio for country in countries:#se crea un ciclo para recore la lista del 1 la 5 population[country] = random.randint(1, 100) print(population) population_v2 = {country: random.randint(1, 100) for country in countries} print(population_v2) ''' names = ['nico','zule', 'santi']#se crea un alista con los nombres ages = [12, 56, 98]#se crea una lista con las edades print(list(zip(names, ages))) new_dict = {name: ages for (name, ages) in zip(names, ages)}#se crea un diccionario con la unio de las listas print(new_dict) ```''' dict = {}#se crea un diccionario vacio for i in range(1, 5):#se crea un ciclo para recore la lista del 1 al 5 dict\[i] = i \* 2#se agrega a la lista el resultado de multiplicador por 2 print(dict) dict\_v2 = { i: i \* 2 for i in range(1, 5)}# asi es mas faci de acer el diccionario print(dict\_v2) import random#se importa la libreria ramdon countries = \['col', 'mex','bol','pe']#se crea una lista con los paises population = {}#se crea un diccionario vacio for country in countries:#se crea un ciclo para recore la lista del 1 la 5 population\[country] = random.randint(1, 100) print(population) population\_v2 = {country: random.randint(1, 100) for country in countries} print(population\_v2) ''' names = \['nico','zule', 'santi']#se crea un alista con los nombres ages = \[12, 56, 98]#se crea una lista con las edades print(list(zip(names, ages))) new\_dict = {name: ages for (name, ages) in zip(names, ages)}#se crea un diccionario con la unio de las listas print(new\_dict)
Desafío. Objetivo: Crea un diccionario usando comprensión de diccionario donde las claves sean números del 1 al 10, y los valores sean listas que contengan los primeros cinco múltiplos de cada número. Instrucciones: Utiliza un bucle for dentro de la comprensión de diccionario para iterar a través de un rango de números del 1 al 10.La clave será cada número en el rango.El valor asociado a cada clave será una lista que contenga los primeros cinco múltiplos del número clave. Un múltiplo de un número se obtiene multiplicando ese número por 1, 2, 3, 4, y 5 respectivamente.
En resumen, las comprensiones de diccionarios son una forma eficiente de crear diccionarios en Python, permitiéndonos reducir múltiples líneas de código a una sola línea. Esto no solo hace que el código sea más fácil de escribir, sino también más fácil de leer y mantener
`#Key:Value ` `dict = {}` `for i in range(1,11): #Key = 1 : Value = i*2` ` dict[i] = i * 2` `print(dict)` `#Dictionary Comprehension` `dict_v2 = {i:i*2 for i in range(1,11)}` `print(dict_v2)` `#DICCIONARIO PAIS-POBLACION` `import random` `countries = ['col', 'mex', 'bol', 'pe']` `population = {}` `for country in countries:` ` population[country] = random.randint(1,100)` `print(population)` `population_v2 = {country: random.randint(1,100) for country in countries}` `print(population_v2)` `#DICCIONARIO DE DOS LISTAS names:ages` `names = ['nico', 'zule', 'santi']` `ages = [12, 56, 98]` `print(list(zip(names, ages))) #zip: une dos listas en tuplas` `new_dict = {name:age for (name, age) in zip(names, ages)}` `print(new_dict)`
A small contribution: \--- ```python # What happens when one list is shorter than the other? numbers = [1, 3, 6, 7, 8, 4, 3, 2] letters = ['a', 'c', 'v', 'm'] print("list(zip(numbers, letters)): ", list(zip(numbers, letters))) # list(zip(numbers, letters)): [(1, 'a'), (3, 'c'), (6, 'v'), (7, 'm')] # the resulting list of tuples will be the size of the shorter list # what happens when there're now 3 lists of different sizes each? bools = [True, True, False] print("same but with 3 lists: ", list(zip(numbers, letters, bools))) # same but with 3 lists: [(1, 'a', True), (3, 'c', True), (6, 'v', False)] # the resulting list will be of the size of the smaller list ```
import random # Importa el módulo random para generar números aleatorios countries = \["col", "mex", "bol", "pe"] # Lista de países population = {} # Diccionario vacío para almacenar las poblaciones \# Para cada país en la lista de países... for country in countries: \# Asigna al país una población aleatoria entre 1 y 100, y lo agrega al diccionario population population\[country] = random.randint(1, 100) \# Imprime el diccionario population, que ahora contiene las poblaciones aleatorias de los países print(population)
mi guía para saber cada paso `< # Lista de nombres` `names = ["nico", "zule", "santi"]` `# Lista de edades` `ages = [12, 56, 98]` `# La función zip() toma elementos de múltiples iterables y los agrupa en tuplas` `# Luego, la función list() convierte ese objeto de tuplas en una lista de tuplas` `print(list(zip(names, ages)))` `# Creación de un nuevo diccionario donde las claves son nombres y los valores son edades` `# Usando una expresión de diccionario junto con la función zip() para combinar nombres y edades` `new_dict = {name: age for (name, age) in zip(names, ages)}` `# Imprime el nuevo diccionario` `print(new_dict)` `>`

Dictionary Comprehension

dict = {}
for i in range(1, 11):
    dict[i] = i * 2
print(dict)

‘’‘con Dictionary Comprehension’’’

dict2 = {i: i * 2 for i in range(1, 11)}
print(dict2)

‘’’’’’

import random

countries = ['col', 'pe', 'cad']
population = {}
for country in countries:
    population[country] = random.randint(1, 100)

print(population)

‘’‘el ejercicio anterior se puede escribir mejor así:’’’

countries = ['col', 'pe', 'cad']
populationV2 = { country: random.randint(1, 100) for country in countries }
print(populationV2)

‘’‘union entre listas’’’

names = ['nico', 'zule', 'santi']
ages = [12, 45, 21]

union = zip(names, ages)
listNames = list(union)
print(zip(names, ages))
print(listNames)

#generando diccionario de listNames

newDict = { name: age for (name, age) in listNames }
print(newDict)
print(list(newDict))
*# Dictionary Comprehension* dict = {}for i in range(1, 11):    dict\[i] = i \* 2print(dict) *'''con Dictionary Comprehension'''*dict2 = {i: i \* 2 for i in range(1, 11)}print(dict2) *''''''*import random countries = \['col', 'pe', 'cad']population = {}for country in countries:    population\[country] = random.randint(1, 100) print(population) *'''el ejercicio anterior se puede escribir mejor asi:'''*countries = \['col', 'pe', 'cad']populationV2 = { country: random.randint(1, 100) for country in countries }print(populationV2) *'''union entre listas'''* names = \['nico', 'zule', 'santi']ages = \[12, 45, 21] union = zip(names, ages)listNames = list(union)print(zip(names, ages))print(listNames) *#generando diccionario de list*newDict = { name: age for (name, age) in listNames }print(newDict)print(list(newDict))
```python import random def show_dictionary(dictionary): print(dictionary) def old_way_create_dictionary(range_min, range_max): print("Executing old_way_create_dictionary(range_min:=>", range_min, ", range_max:=>", range_max, ")") dictionary = {} for key in range(range_min, range_max): dictionary[key] = key * 2 show_dictionary(dictionary) def new_way_create_dictionary(range_min, range_max): print("Executing new_way_create_dictionary(range_min:=>", range_min, ", range_max:=>", range_max, ")") dictionary_comprehension = { key: key * 2 for key in range(range_min, range_max) } show_dictionary(dictionary_comprehension) def old_way_create_dictionary_from_list(range_min, range_max): print("Executing old_way_create_dictionary_from_list(range_min:=>", range_min, ", range_max:=>", range_max, ")") countries = ['col', 'mex', 'bol', 'pe'] population = {} for country in countries: population[country] = random.randint(range_min, range_max) show_dictionary(population) def new_way_create_dictionary_from_list(range_min, range_max): print("Executing new_way_create_dictionary_from_list(range_min:=>", range_min, ", range_max:=>", range_max, ")") countries = ['col', 'mex', 'bol', 'pe'] population = {key: random.randint(range_min, range_max) for key in countries} show_dictionary(population) def create_dictionary_from_list(): print("Executing create_dictionary_from_list_with_condition()") names = ['nico', 'zule', 'santi'] ages = [12, 56, 98] names_and_ages = list(zip(names, ages)) dictionary = {name: age for (name, age) in names_and_ages} show_dictionary(dictionary) def main(): range_min, range_max = 1, 11 old_way_create_dictionary(range_min, range_max) new_way_create_dictionary(range_min, range_max) old_way_create_dictionary_from_list(range_min, range_max) new_way_create_dictionary_from_list(range_min, range_max) create_dictionary_from_list( ) ```
Cómo hago para desactivar la IA en Replit? literalmente anticipa todo lo que voy a hacer, y lo hace idéntico al profesor, y así no puedo practicar por mi cuenta, cuándo ya veo todo lo que tengo que hacer
Hice esto y me salió lo mismo ![](https://static.platzi.com/media/user_upload/image-4ab61a76-c06b-46f5-b707-56cb2a1a1b76.jpg)
```js names = ["Juan", "Pedro", "Maria"] ages = [18, 20, 22] dict = {} for i in range(len(names)): dict[names[i]] = ages[i] print(dict) print(list(zip(names, ages))) dict_v2 = {names[i]: ages[i] for i in range(len(names))} print(dict_v2) dict_v3 = {name: age for name, age in zip(names, ages)} print(dict_v3) ```names = \["Juan", "Pedro", "Maria"]ages = \[18, 20, 22]dict = {}for i in range(len(names)): dict\[names\[i]] = ages\[i]print(dict)print(list(zip(names, ages)))dict\_v2 = {names\[i]: ages\[i] for i in range(len(names))}print(dict\_v2)dict\_v3 = {name: age for name, age in zip(names, ages)}print(dict\_v3)
```python dict = {} for i in range(1, 5): dict\[i] = i \* 2 print(dict) \# Very similar to list comprehension dict\_v2 = {i: i \* 2 for i in range(1, 5)} print(dict\_v2) import random countries = \['USA', 'Canada', 'Mexico', 'Brazil', 'Argentina'] population = {} for country in countries: population\[country] = random.randint(100, 1000000) print(population) population\_v2 = {country: random.randint(100, 1000000) for country in countries} print(population\_v2) names = \['John', 'Jane', 'Joe', 'Jim', 'Jill'] ages = \[random.randint(18, 80) for \_ in range(len(names))] print(list(zip(names, ages))) new\_dict = {name: age for (name, age) in zip(names, ages) if age > 50} print(new\_dict) ```
```js names = ['nico', 'zule', 'santi'] ages = [12, 56, 98] print(list(zip(names, ages))) new_dict = {name: age for (name, age) in zip(names,ages)} print(new_dict) dict = {} for i in range(len(names)): dict[names[i]] = ages[i] print(dict) dict_123 = {names[i] : ages[i] for i in range(len(names))} print(dict_123) ```names = \['nico', 'zule', 'santi'] ages = \[12, 56, 98] print(list(zip(names, ages))) new\_dict = {name: age for (name, age) in zip(names,ages)} print(new\_dict) dict = {} for i in range(len(names)): dict\[names\[i]] = ages\[i] print(dict) dict\_123 = {names\[i] : ages\[i] for i in range(len(names))} print(dict\_123)
Se que la diferencia no es mucha con respecto al código del profe Nicolas, pero estoy tratando de hacer mi código lo mas limpio posible ```js dict = {i : i*2 for i in range(5)} print (dict) ```dict = {i : i\*2 for i in range(5)} print (dict)
Se que la diferencia no es mucha con respecto al código del profe Nicolas, pero estoy tratando de hacer mi código lo mas limpio posible ```js dict = {i : i*2 for i in range(5)} print (dict) ```

Dictionary Comprehension o Comprensión de Diccionarios es una manera de guardar elementos como lo haríamos en una lista, pero en lugar de acceder a los elementos usando su indice o “index”, le asignamos una llave para acceder a este elemento con esa misma llave.

mi_diccionario = {"key1":<value1>,"key2":<value2>,"key3":<value3>,"key4":<value4>}

Esta sigue el principio de “Hacer más con menos código”. No solo se trata de escribir menos código, sino también de hacer que el código sea más legible y fácil de entender.

Cada elemento en un diccionario contiene una clave y un valor, es decir, un par de clave-valor

La comprensión de diccionarios puede ser muy útil para crear nuevos diccionarios basados en diccionarios existentes e iterables.

Otro ejemplo:

alumnos = ['Juancho', 'Rodri', 'Axel']
notas = [10, 6, 9]
notas_de_alumnos = {alumno: nota for alumno, nota in zip(alumnos, notas)}
print(notas_de_alumnos)
  1. Definición de listas:

    alumnos = ['Juancho', 'Rodri', 'Axel']
    notas = [10, 6, 9]
    

    Se crean dos listas: alumnos que contiene nombres de estudiantes, y notas que contiene las calificaciones correspondientes. Cada nombre de estudiante en la lista alumnos está asociado con una calificación en la misma posición en la lista notas.

  2. Uso de zip:

    zip(alumnos, notas)
    

    La función zip combina elementos de las listas alumnos y notas en tuplas. En este caso, crea un iterador que produce las siguientes tuplas: ('Juancho', 10), ('Rodri', 6), y ('Axel', 9).

  3. Comprensión de diccionario:

    {alumno: nota for alumno, nota in zip(alumnos, notas)}
    

    Utilizando una comprensión de diccionario, se crea un nuevo diccionario llamado notas_de_alumnos. Para cada tupla (alumno, nota) generada por zip, se crea una entrada en el diccionario donde el nombre del alumno es la clave y la nota es el valor.

  4. Resultado final:

    print(notas_de_alumnos)
    

    Después de ejecutar este código, notas_de_alumnos contendrá:

    {'Juancho': 10, 'Rodri': 6, 'Axel': 9}
    

    El diccionario resultante asocia cada nombre de estudiante con su respectiva calificación. En este caso, se utiliza para representar las notas de los alumnos como pares clave-valor en un diccionario.

Para unir dos listas en un solo diccionario, puedes utilizar la función zip junto con un diccionario de comprensión. Aquí hay un ejemplo:

nombres = ['nico', 'zule', 'santi']
edades = [12, 56, 98]

# Usando zip y un diccionario de comprensión para combinar las listas
diccionario_resultante = {nombre: edad for nombre, edad in zip(nombres, edades)}

print(diccionario_resultante)

Explicación:

  1. zip(nombres, edades): La función zip toma dos o más iterables y devuelve un iterador que genera tuplas conteniendo elementos correspondientes de los iterables originales. En este caso, crea un iterador que combina los elementos de las listas nombres y edades en tuplas.

  2. {nombre: edad for nombre, edad in zip(nombres, edades)}: Utiliza una comprensión de diccionario para crear un nuevo diccionario. Para cada tupla (nombre, edad) generada por zip, crea una entrada en el diccionario donde el nombre es la clave y la edad es el valor.

  3. print(diccionario_resultante): Imprime el diccionario resultante.

Después de ejecutar este código, diccionario_resultante contendrá:

{'nico': 12, 'zule': 56, 'santi': 98}

Cada nombre en la lista nombres está emparejado con la edad correspondiente en la lista edades, formando un diccionario.

En este código, se asume que las dos listas tienen la misma longitud, y se crea un diccionario donde los elementos en la posición i de la lista names son las claves, y los elementos en la posición i de la lista edades son los valores correspondientes.

Aquí hay una explicación detallada del código:

  1. Definición de listas:

    names = ['nico', 'zule', "santi"]
    edades = [12, 56, 98]
    

    Se crean dos listas, names y edades, que contienen nombres y edades respectivamente. Cada nombre en la lista names está asociado con la edad en la misma posición en la lista edades.

  2. Comprensión de diccionario:

    new_dict = {names[i]: edades[i] for i in range(len(names))}
    

    Esta línea de código utiliza una comprensión de diccionario para crear un nuevo diccionario llamado new_dict. Aquí hay una desglose de lo que sucede:

    • range(len(names)): Genera una secuencia de números desde 0 hasta la longitud de la lista names menos 1. En este caso, crea la secuencia [0, 1, 2].
    • names[i]: edades[i]: Para cada valor de i en la secuencia generada, toma el elemento en la posición i de la lista names como clave y el elemento en la posición i de la lista edades como valor.
    • {...}: Construye un diccionario con las claves y valores generados.
  3. Resultado final:
    Después de ejecutar este código, new_dict contendrá un diccionario que asocia los nombres con las edades de la siguiente manera:

    {'nico': 12, 'zule': 56, 'santi': 98}
    

    Cada nombre en la lista names se convierte en una clave en el diccionario, y la edad correspondiente en la lista edades se convierte en el valor asociado.

Trate de hacerlo mas simple y este fue mi resultado

data = [('nico', 12), ('zule', 56), ('santi', 98)]
names, edades = zip(*data)
new_dict = dict(data)

```python #E.g. 1 dict = {} for i in range(1,11): dict[i] = i * 2 print(dict) dict_2 = {i:i * 2 for i in range(1,11)} print(dict_2) #e.g. 2 import random countries = ['col', 'mex', 'bol', 'pe'] population = {} for country in countries: population[country] = random.randint(1,1000) print(population) population_2 = {country:random.randint(1,1000) for country in countries} print(population_2) #e.g. 3 names = ['luis', 'dani', 'camila'] ages = [22, 24, 25] print(list(zip(names, ages))) new_dict = {names:ages for (names, ages) in zip(names, ages)} print(new_dict) ```

Es increible la forma de realizar comprehensions a base de diccionario. Es interesante lo que se puede aprender.

Forma alternativa al ultimo ejercicio

names = ['nico', 'zule', 'santi']
ages = [12, 56, 98]

users = { name: ages[i] for i, name in enumerate(names) }
print(users)

Dictionary comprehensions

💡 Nota:

  • El if es completamente opcional
  • Se lee “Para cada elemento en el iterable, Coloco una llave y un valor, si se cumple la condición”
LIMIT = 100
my_dict = { i: i**3 for i in range(1,LIMIT+1) if i % 3 != 0 }
print(my_dict)
import random 

empresas = ["amazon", "linio", "mercado libre"]
presupuesto = {}

for empresa in empresas :
  presupuesto[empresa] = random.randint(1, 2800)

print(presupuesto)

Algo que descubrí y se los comparto:


# What happens when one list is shorter than the other?

numbers = [1, 3, 6, 7, 8, 4, 3, 2]
letters = ['a', 'c', 'v', 'm']

print("list(zip(numbers, letters)): ", list(zip(numbers, letters)))     # list(zip(numbers, letters)):  [(1, 'a'), (3, 'c'), (6, 'v'), (7, 'm')]

# the resulting list of tuples will be the size of the shorter list

# what happens when there're now 3 lists of different sizes each? 

bools = [True, True, False]

print("same but with 3 lists: ", list(zip(numbers, letters, bools)))        # same but with 3 lists:  [(1, 'a', True), (3, 'c', True), (6, 'v', False)]

# the resulting list will be of the size of the smaller list

El mio quedo asi:

mascotas = ['perro', 'gato', 'perico', 'pato', 'hamster']
nombres_mascotas = ['Max', 'Michi', 'Poli', 'Patroclo', 'Solovino']

list_dict = {nombre_mascota:mascota for mascota, nombre_mascota in zip(mascotas, nombres_mascotas)}
print(list_dict)

Entender los conceptos de “elemento” e “iterable” es fundamental para trabajar con comprensiones de listas y diccionarios en Python.

Elemento:
En programación, un “elemento” se refiere a un valor individual dentro de una secuencia o colección de datos. Puede ser un número, una cadena de texto, un objeto, o cualquier otro tipo de dato. Por ejemplo, en una lista [1, 2, 3], cada número (1, 2, 3) es un elemento de la lista.

Iterable:
Un “iterable” es un objeto en Python que puede ser iterado o recorrido elemento por elemento. Los iterables son secuencias de datos que permiten acceder a sus elementos en un orden específico. Algunos ejemplos de iterables en Python incluyen listas, tuplas, cadenas, diccionarios y conjuntos.

Un iterable es una estructura de datos que puede ser recorrida utilizando un bucle for. Cada vez que el bucle for itera sobre el iterable, obtiene un elemento del iterable en cada paso hasta que se hayan procesado todos los elementos.

Ejemplos de iterables:

  • Listas: mi_lista = [1, 2, 3]
  • Tuplas: mi_tupla = (1, 2, 3)
  • Cadenas: mi_cadena = "Hola"
  • Diccionarios: mi_diccionario = {'a': 1, 'b': 2}
  • Conjuntos: mi_conjunto = {1, 2, 3}

Un “elemento” es un valor individual dentro de una colección de datos, y un “iterable” es una estructura de datos que permite recorrer sus elementos en un orden específico utilizando un bucle for u otras técnicas de iteración. Las List Comprehensions y las Dictionary Comprehensions son útiles para crear nuevas colecciones (listas o diccionarios) a partir de iterables aplicando una expresión a cada elemento del iterable.

names = ['david','jose','mari']
edad = [19,12,43]

resultado_reniec = {i:edad[names.index(i)] for i in names}
print (resultado_reniec)

Esto también funciona.

names = ['nico', 'zule', "santi"]
edades = [12, 56, 98]

mix = zip(names,edades)
print(dict(mix))

Tengo más aportes:

# Mientras tanto en ciudad gotica...
# Te imaginas poder tener el poder de las list comprenhension en diccionarios...
'''
dict = {}
for i in range(1, 5):
  dict[i] = i * 2

print(dict) # Estoy cansado de eso

# Espera acaso es...

dict_v2 = { i: i * 2 for i in range(1, 5) }
print(dict_v2)
'''
# MI SALVACIÓN!!!!!!

'''
import random

countries = ['col', 'mex', 'bol', 'pe']
population = {}
for country in countries:
  population[country] = random.randint(1, 100)

print(population)

population_v2 = { country: random.randint(1, 100) for country in countries }
print(population_v2)
'''

names = ['nico', 'zule', 'santi']
ages = [12, 56, 98]

print(list(zip(names, ages)))

new_dict = { name: age for (name, age) in zip(names, ages) }
print(new_dict)

diccionario = {}
for i in range (1,11):
diccionario[i]= i*2
print(diccionario)

diccionario_2 ={i: i*2 for i in range (1,5)}
print(diccionario_2)

import random
paises = [“colombia” , “paraguay”, “venezuela” , “guatemala”]
poblacion = {}
for pais in paises:
poblacion[pais] = random.randint(1,100)
print(poblacion)

poblacion2={pais:random.randint(1,100)for pais in paises}

union de dos listas

nombres = [“milo”,“camilo”,“santi”]
edad = [12,15,18]

print(list(zip(nombres, edad)))

nuevo_diccionario = {nombres: edad for (nombres , edad) in zip (nombres , edad)}

randomico == aleatorio

la segunda opcion veo sencillo pero ay que seguir aprendiendo

'''

Los dict comprehensions en Python son una forma concisa y eficiente de construir diccionarios en una sola línea de código. Permiten crear y asignar pares clave-valor a un diccionario utilizando una sintaxis compacta.

'''
import random

#Agregar elementos a un diccionario de forma tradicional
dict = {}
for i in range(1,11):
  dict[i] = i * 2
print(dict)

#Agregar elementos a un diccionario de forma dict comprehensions
dict_2 = {i:i * 2 for i in range(1,11)}
print(dict_2)

#Agregar clave a los valores de la lista de forma tradicional
countries = ['arg', 'brasil', 'mex', 'can', 'ua']
population = {}
for country in countries:
  population[country] = random.randint(1, 100)
print(population)

#Agregar clave a los valores de la lista con dict comprehensions
population_2 = {country: random.randint(1,100) for country in countries}
print(population_2)

#Crear un diccionario con ambas listas en list comprehension
names = ['Guillermo', 'Danae', 'Rafael', 'Hector', 'Jesus', 'Fernando', 'Ignacio', 'Suri', 'Antonio', 'Samuel', 'Alejandro']
ages = [29, 28, 30, 28, 27, 28, 29, 28, 25, 31, 28]

#Uso de la función zip
dict_list = list(zip(names, ages))
print(dict_list)
print(type(dict_list)) #Regresa una lista de Tuples

dict_3 = {name : age for (name,age) in zip(names,ages)}
print(dict_3)
print(type(dict_3)) #Regresa un diccionario

Otro pequeño ejemplo de la compresión de diccionarios:

Tomamos un diccionario con una lista de materias y calificaciones, y devolvemos otro diccionario pero con las materias en mayúsculas.

Notas de clase

dict = {}

for i in range(1,6):
  dict[i] = i
print(dict)

#Con Dictionary Comprehension
dict_v2 = {i:i for i in range(1,6)}
print(dict_v2)

#Otro ejemplo
import random
countries = ['col', 'mex']
population = {}

for i in countries:
  population[i] = random.randint(1, 999)

print(population)

#Con Dictionary Comprehension
population_v2 = {i:random.randint(1, 999) for i in countries}

print(population_v2)

#Otro ejemplo con dos listas
names = ['Jose', 'María']
edades = [18, 20]

dict = {names[i] : edades[i] for i in range(len(names))}
print(dict)

  

Se que no es comprension de listas, pero si se busca una solucion rapida puedes hacer directamente lo siguiente:

new_dict = dict(zip(names, ages))
#se crea el diccionario con el par clave:valor
personas = ['Alexander', 'Raquel', 'Jose']
edades = [28,29,68]

dict_persona_edad = {personas[i]:edades[i] for i in range(0,len(personas))}
print(dict_persona_edad)
# agregando nombres de una lista y agregando una key con su respectivo numero

dict = {}
names = ["Daniel", "Jose", "pepe", "cheo", "kali", "Esmeralda"]
for element in range(0, len(names)):
  dict[element] = names[element]

print(dict)

OUTPUT:
{0: 'Daniel', 1: 'Jose', 2: 'pepe', 3: 'cheo', 4: 'kali', 5: 'Esmeralda'}

En este ejemplo quise practicar hacer un dicionario donde sus llaves fueran las letras del abecedario empezando desde la “a”,

Para hacer esto utilice la libreria de string y su metodo llamado string.ascii_lowercase

import string
#asigno el metodo a la variable s para usarla mas comodamente.

s= string.ascii_lowercase

names = ["Rocket", "Lylla", "Floor", "Dientes"]

#Creamos el diccionario
dict = { i: names[s.index(i)] for i in s[s.index("a"):len(names)]}

print(dict)

OUTPUT:
{'a': 'Rocket', 'b': 'Lylla', 'c': 'Floor', 'd': 'Dientes'}

Consejo, no llamen a una variable con el mismo nombre de una función, me comí la cabeza por una cosa muy sencilla.

'''
dict = {}
for i in range(1, 6):
  dict[i] = i * 2
print(dict)

dict_v2 = {i: i * 2 for i in range(1, 6)}
print(dict_v2)
'''
'''
import random
countries = ['col', 'mex', 'bol', 'pe']
population = {}
for country in countries:
  population[country] = random.randint(1, 100)
print(population)

population_v2 = { country: random.randint(1, 100) for country in countries}
print(population_v2)
'''

names = ['andres', 'tata', 'geo']
ages = [22, 18, 45]

print(list(zip(names, ages)))

new_dict = {name: age for (name, age) in zip(names, ages)}
print(new_dict)

Yo lo resolvi asi, aunque no se si cuenta como “dict comprehention”

family = dict(zip(members, age))

Una única observación. No son necesarios los parentesis para recorrer el iterable zip con dos variables distintas. Podría hacerse así perfectamente:

    names = ["nico", "zule", "santi"]
    ages = [12, 56, 68]
    myDict = { name : age for name, age in zip(names, ages)}
    print(myDict)

Dejo otra alternativa para armar el mismo diccionario con dos listas distintas (siempre que la segunda lista tenga al menos la misma cantidad de elementos que la primera referenciada en el for:

    names = ["nico", "zule", "santi"]
    ages = [12, 56, 68]
    myDict = { names[i] : ages[i] for i in range(len(names)) } 
    print(myDict)

Saludos!!!

Les comparto el cómo generar un diccionario a partir de otro diccionario:

my_list = range(1, 11)
my_dict = {i : i * 2 for i in my_list if i % 2 == 0 }
print(my_dict)
# Forma uno
my_new_dict = { key:value for key, value in my_dict.items() if key >= 4 and key <= 8 }
# Forma dos
my_new_dict = { key: my_dict[key] * 1 for key in my_dict if key >= 4 and key <= 8 }

print(my_new_dict)
# {
#     4: 8, 
#     6: 12, 
#     8: 16
# }

seria mas bonito si las los nombres, paises , edad, fueran en español

Dictionary comprehension es una característica de Python que permite crear diccionarios de manera concisa y eficiente. Es una sintaxis compacta para crear un diccionario a partir de otro iterable, utilizando una única línea de código.

Buen día, compañeros.
Les comparto otra manera de resolver el último ejercicio usando funciones:

# Se determina el nombre con su respectiva edad correspondiente.
def name_age (list_1, list_2):
	"""Se determina la edad de cada persona en orden, tomando como referencia dos listas: una con los "nombres" y otra con las "edades" correspondientes.

    return: El resultado es un diccionario que contiene los nombres y sus edades respectivas, presentados de manera ordenada y correspondiente.
    """

	return {i: a  for i, a in zip(list_1, list_2)}
dict_list = {}
list = ['goku', 'vegeta', 'gohan', 'yamcha']

dict_list = {personaje : random.randint(1000,1000000) for personaje in list }

print(dict_list)

for nombre , poder in dict_list.items():
  if poder == max(dict_list.values()):
    print('El poder mas alto es de: ' + nombre + ' cuyo poder es de: ' + str(poder))