No tienes acceso a esta clase

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

Dictionary Comprehension: condition

8/44
Recursos

Aportes 99

Preguntas 8

Ordenar por:

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

Reto cumplido

La línea mágica que debemos cambiar para que cuente la frecuencia es:

Cambiar c: c.upper() por c: text.count(c)

Antes:

text = "Hola a todos, esta es una cadena de texto de prueba."
unique = { c: c.upper() for c in text if c in 'aeiou' }

Después:

text = "Hola a todos, esta es una cadena de texto de prueba."
unique = { c: text.count(c) for c in text if c in 'aeiou' }

Mi código final:

def run():
    text = "Hola a todos, esta es una cadena de texto de prueba."
    print(text)
    unique = { c: text.count(c) for c in text if c in 'aeiou' }
    print(f"unique: {unique}")

if __name__ == '__main__':
    run()

Ahora si queremos que nos re emplace si la letra es par o impar según el numero que le corresponde, para ello realizamos el siguiente ejemplo.

dict1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
reemplazar = {k: ('impar' if v % 2 == 0 else 'par') for (k, v) in dict1.items()}
print(reemplazar)
Obtenemos
print(reemplazar)
{'a': 'par', 'b': 'impar', 'c': 'par', 'd': 'impar', 'e': 'par', 'f': 'impar'}

Material de Apoyo

Guiándome del aporte de Terry, hice como sería analizar un texto completo. Con vocales normales, acentuada, consonantes y todas las letras en conjunto:

def run():
  
  vowels = 'aeiou'
  special_vowels = 'áéíóúü'
  all_vowels = vowels + special_vowels
  consonants = 'bcdfghjklmnñpqrstvwyz'
  all_the_letter = all_vowels + consonants
  
  text = """

Poema Fe mía de Pedro Salinas
  
No me fío de la rosa

de papel,

tantas veces que la hice

yo con mis manos.

Ni me fío de la otra

rosa verdadera,

hija del sol y sazón,

la prometida del viento.

De ti que nunca te hice,

de ti que nunca te hicieron,

de ti me fío, redondo

seguro azar."""

  text = text.lower()

  print("Descomposición del texto: " "\n")
  
  total_vowels = { i: text.count(i) for i in text if i in all_vowels}
  print(f"total_vowels: {total_vowels}" "\n")
  
  total_consonats = { i: text.count(i) for i in text if i in consonants}
  print(f"total_consonats: {total_consonats}" "\n")

  all_the_letter = { i: text.count(i) for i in text if i in all_the_letter}
  print(f"all_the_letter: {all_the_letter}" "\n")

if __name__ == '__main__':
    run()

La comprensión de diccionario con condición es una forma concisa de crear un diccionario a partir de otro diccionario existente, filtrando los elementos según una condición dada.

La sintaxis básica de la comprensión de diccionario con condición es la siguiente:

css
{key: value for key, value in dictionary.items() if condition}

donde dictionary es el diccionario original, condition es la condición que se evalúa para cada par clave-valor del diccionario original y solo se incluyen los elementos que cumplen con la condición.

Por ejemplo, supongamos que tenemos un diccionario que contiene el nombre y la edad de varias personas:

people = {'Alice': 25, 'Bob': 30, 'Charlie': 35, 'Dave': 40}

Podemos crear un nuevo diccionario que contenga solo los nombres y las edades de las personas mayores de 30 años de la siguiente manera:

css

{key: value for key, value in people.items() if value > 30}

El resultado sería:

python

{'Charlie': 35, 'Dave': 40}

Este diccionario solo contiene las personas mayores de 30 años y sus edades correspondientes.

Esto lo saque de chatgpt sirve de mucho para reforzar el conocimiento.

Para el conteo de las vocales hice de esta forma -->

texto = 'Hola, soy Stefanie'

unico = {c.upper() : texto.count(c) for c in texto if c in {'a', 'e', 'i', 'o', 'u'}}

print(unico)

Hice un pequeño ejercicio própio para reforzar:

  • Genere un diccionario usando comprehension para poder guardar una relación llave valor con el conteo de las vocales de una palabra introducida

Mi solución:

palabra=str(input("Digita la palabra=> "))
dictionary={char:palabra.count(char) for char in palabra if char in 'aeiou'}
print(dictionary)

Comparto mi codigo.

import random
countries = ['Col', 'Mex', 'Arg', 'USA']
population_v2 = {country: random.randint(1, 100) for country in countries}
print(population_v2)

result = { country: population for (country, population) in population_v2.items() if population > 30}
print(result)

result = {country: population for (country, population) in population_v2.items() if population > 20}

text = 'Hola, soy Andy y esta es una cadena de caracteres de prueba'
unique = {a: a.upper() for a in text if a in 'ndu'}
print(unique)
unique_2 = {d: d.count(text) for d in text if d in 'auio'}
print(unique_2)

Hice un programa para que contara las veces que aparece una vocal en un texto:

text= 'El cielo resplandece a mi alrededor'
countUnique = {c: text.count(c) for c in 'aeiou'}
print(countUnique)

Con todo esto se podría hacer una función que verifique la complejidad de una contraseña.

import random
countries = ['col', 'mex','bol', 'pe']

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

result ={country: population for (country, population) in population_v2.items() if population > 50}
print(result)

text = 'Hola, soy Nicolas'
unique = {c: c.upper() for c in text if c in 'aeiou'}
print(unique)

Acá hice una representación del mundial

import random
countries = ["Qatar", "Alemania", "Dinamarca", "Brasil", "Bélgica", "Francia", "Croacia", "España", "Serbia", "Inglaterra", "Suiza", "Paises Bajos", "Argentina", "Irán", "Corea del Sur", "Japón", "Arabia Saudita", "Uruguay", "Ecuador", "Canadá", "Ghana", "Senegal", "Portugal", "Polonia", "Túnez", "Marruecos", "Camerún", "Estados Unidos", "México", "Gales", "Australia", "Costa Rica"]
Wins = {country: random.randint(1, 7) for country in countries}

result = {country: win for (country, win) in Wins.items() if win > 6 }
print(result)
import random
con = ['col','mex','bol','pe']
pobla_2 ={cont: random.randint(1,100) for cont in con}
print(pobla_2)

result = {cont: pobla for (cont,pobla)in pobla_2.items() if pobla > 30}
print(result)

text = 'Hola, soy Sergio'
unique = { c: c.upper() for c in text if c in 'aeiou'}
print(unique)

MI solución al reto 😄

frequency = {
  char: text.count(char)
  for char in text if char.lower() in "aeiou"
}

Cómo lo quiero + Cómo lo busco + filtro

Les comparto el código que hice con el fin de practicar list y dictionary comprehension a lavez. La idea es poder crear un diccionario con la informacion que ingrese el usuario para los valores sobre su nombre, edad y profesion.

info = ["name", "age", "Profession"]
data = [input("ingresa " + i + " :") for i in info]
user_data = {i:e for (i,e) in zip(info, data)}

print(user_data)

Solución agregando al diccionario una lista con la letra en mayúscula y la cantidad de ocurrencias:

unique = {c: [c.upper(), text.count(c)] for c in text if c in 'aeiou'}
print(unique)

Dict Comprehension con conidicion

#-----------Dict comprehension con coniciones------------

#Crear un dict comprehension con una lista
import random 
countries = ['colombia', 'bolivia', 'mexico']

population = { country: random.randint(1, 100) for country in countries}
print(population)
--> {'colombia': 36, 'bolivia': 23, 'mexico': 13}

#crear un dict comprehension con una condicion
#paises con poblacion mayor a 30
result = {country: population for (country, population) in population.items() if population > 30}
print(result) 
--> {'colombia': 36}

#dict comprehension de las vocales de una oracion
text = 'Hola nuevo mundo'
unique = { c: c.upper() for c in text if c in 'aeiou'}
print(unique)
--> {'o': 'O', 'a': 'A', 'u': 'U', 'e': 'E'}

Chicos les comparto mi solución al reto!

text = 'Hola, soy Nicolas'
unique = {c: text.count(c) for c in text if c in 'aeiou'}
print(unique)

Lo intente hacer desde el otro modo para comprenderlo mejor y lo pude entender mejor, espero les pueda servir

text = 'Hola, soy Alex'
for c in text:
    if c in 'aeiou':
        dict= {c:c.upper()}
        print(dict )

Mi solución al reto 😄

text = "Hola, Soy Paola"
vowels = ["a", "e", "i", "o", "u"]
total_vowels = {
  letter: text.lower().count(letter.lower())
  for letter in text if letter in vowels
}

print(total_vowels)

```js text = 'hola, soy andres' unique = {c: c.upper() for c in text if c in 'aeiou'} print(unique) ```
Esta fue mi propuesta de solución para el reto: ```html # reto, transformarlo en mayuscula sino tener el numero de frecuencia de la letra text = 'Hola, soy David' vocales = { c: text.count(c) for c in text if c in 'aeiou' } print(vocales) ```
Curioso, en el último ejercicio como únicamente pusimos "aeiou" si tu nombre comienza con una vocal maýuscula como el mío, no lo imprime jeje
Aqui dejo mi solución al reto ```js text = "Esta es mi cadena de texto" unique = { c: text.lower().count(c) for c in text if c in 'aeiou' } print(unique) ```
```python text='hola soy daniel' vocales={letra:text.count(letra) for letra in text if letra in 'aeiou'} print(vocales) ```mi solución al reto
**Diccionario de vocales key y frecuencia value a partir de un string:** \# String de entrada text = 'Hola, soy Gabriel' \# Convertir el texto a minúsculas para contar correctamente las vocales text = text.lower() \# Crear un diccionario con comprensión de diccionarios donde las claves son las vocales y los valores son la frecuencia de las vocales en el texto vowel\_frequency = {vowel: text.count(vowel) for vowel in 'aeiou' if vowel in text} print(vowel\_frequency)  # Salida: {'o': 2, 'a': 2, 'e': 1, 'i': 1}
Hice la práctica de el reto planteado con otros elementos, quedó así ![](https://static.platzi.com/media/user_upload/imagen-92f27c3c-f03b-49bc-a756-6cbd05210055.jpg) ![](https://static.platzi.com/media/user_upload/imagen-b09f0dc7-f246-40a1-8361-356a93e64a26.jpg) El elemento Count es fundamental
Con este tema me revuelvo un poco, pero explica muy bien el profe :)
Si necesitas que sean opuestos `text = 'Hola, soy nicolas'` `unique= {c : text.count(c) for c in text if not c in 'aeiou ,'}` `print(unique)` Nota: ESPACIO y ',' los toma como caracteres.
Desafío. Dada una lista de precios de productos, crea un diccionario con los nombres de los productos como claves y un descuento del 10% aplicado a los precios mayores a 100,mientrasquelospreciosmenoresoigualesa100 no tienen descuento. productos = {"manzana": 30, "banana": 150, "cereza": 90, "sandía": 200}
Se puede agregar la clausula else al dict comprehension, solo que debes colocar primero el if y el else antes del ciclo for: ![](https://static.platzi.com/media/user_upload/Screenshot%20from%202024-03-23%2013-23-25-2d8bb7f9-a503-4e30-804c-050cd4b250d7.jpg)

Dictionary Comprehension: con condicionales

import random

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

print('populationV3: ', populationV3)

agregando condicion

result = { country: population for (country, population) in populationV3.items() if population > 20}
print('result: ', result)

```python import random def show_dictionary(dictionary): print(dictionary) def dictionary_with_condition(): print("Executin dictionary_with_condition()") range_min, range_max, countries = 1, 100, ['col', 'mex', 'bol', 'pe'] population = {key: random.randint(range_min, range_max) for key in countries} dictionary = { country: population for (country, population) in population.items() if population > 70 } show_dictionary(dictionary) def create_dictionary_from_strin(): print("Executin create_dictionary_from_strin()") text = 'Hola, soy Sc' dictionary = { character: character.upper() for character in text if character in 'aeiou' } return dictionary def main(): dictionary_with_condition() create_dictionary_from_strin() show_dictionary(create_dictionary_from_strin()) ```
Un ejemplo mas: `word = 'letters'` `letter_counts = {letter: word.count(letter) for letter in word}` `letter_counts` ` {'l': 1, 'e': 2, 't':2, 'r':1, 's': 1}`
Busqué el método que cuenta ocurrencias y adapté la sintaxias para ahcer el diccionario: unique\_2 = {c : text.count(c) for c in text if c in 'aeiou' }
![](https://media.licdn.com/dms/image/D4E22AQFkC55ELdh0Wg/feedshare-shrink_800/0/1702502713258?e=1705536000\&v=beta\&t=ko23Cne3VFhd9LhtiFV4N4k5twRIfm_uRtQNA_7kRhU)
```js text = 'Hola, soy Nicolas' unique = { c: c.count(c) for c in text if c in 'aeiou'} print(unique) ```
```js import random countries = ['col','mex','bol','pe'] population = {} population_v2 = {country: random.randint(1,100) for country in countries } print(population_v2) result = { country : population for ( country, population) in population_v2.items() if population > 20 } print(result) ```
Este recurso de freecodecamp me ayudó mucho a entenderlo mejor : <https://www.freecodecamp.org/news/dictionary-comprehension-in-python-dict-comprehensions-explained/>

Actualmente en replit da ERROR si la linea es muy larga al parecer.

En el caso de la linea 7 me estaba dando ERROR y lo resolvi con un simple enter antes del IF.

text = 'El cielo se pintó de tonos cálidos mientras el sol se despedía lentamente. Las hojas crujían bajo mis pasos, anunciando la llegada del otoño.'
print(text)
unique_upper = {char: char.upper() for char in text if char in 'aeiou'}
unique_count = {char: text.count(char) for char in text if char in 'aeiouáéíóú'}
print(unique_upper)
print(unique_count)

New_dict= {names:ages for(names, ages) in zip(names, ages) if ages > 50}
print (New_dict)

Algo que me cuesta con este tema es declarar el valor del diccionario sin usar la llave con alguna modificación, eso no lo he entendido. Si se fijan, todos los ejemplos se basan en alguna modificación de la llave para asignar el valor Aquí lo intenté pero igual, me tocó con la llave. ![](https://static.platzi.com/media/user_upload/Ejercicio%20dict-248a4e26-5bc5-4750-981e-aa29c4ce35d2.jpg)
Este man me tiene el pc lleno de archivos y no eh aprendido nada de nada

Me gusto la forma de usar comprehensions con condicionales y con muchas formas de usarlo en la programacion. Hay mucho por aprender.

Comparto un código que hice para saber cuáles personas ahorran más del 20% en el mes usando diccionarios y for ![](https://static.platzi.com/media/user_upload/image-501ea83f-f5a1-4316-b929-5eee6c4258e0.jpg)![]()

Excelente…

un texto donde puedes extraer solo los vocales… como input.
mi solucion.

resultado:

Adjunto el codigo que hice del dictionary comprehesion con dos condicionales:

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

lista_dicc = {nombre_mascota:mascota for (nombre_mascota, mascota) in zip(nombres_mascotas, mascotas) if 'e' in mascota and 'i' in nombre_mascota}

print(lista_dicc)

algoritmo :
que cuente el número de vocales de un texto y lo imprima en un diccionario

text = "Hola soy NicolasU"
vocales ="aeiou" #"a","e","i","o","u"]
suma = suma_total = 0
dicc = {}
for i in vocales.lower():
  for e,j in enumerate(text.lower()):
    #print(e,i,j)
    if i == j:
      suma += 1
    if e == len(text)-1:    
      suma_total = suma
      if suma_total != 0:
        dicc[i] = suma_total
        suma = 0
        suma_total = 0
       
print(dicc)   

text=‘Hola, soy Miguel’
#unique = { c: c.upper() for c in text if c in ‘aeiou’ }
unique = { c: text.count© for c in text if c in ‘aeiou’ }
print(unique)

Resumen 😃

import random
countries = ['col', 'mex','bol', 'pe']

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

#Dictionary comprehension con condition
result ={country: population for (country, population) in population_v2.items() if population > 50}
print(result)

#obtener una vocal como llave y con su valor en mayuscula
text = 'Hola, soy Nicolas'
unique = {c: c.upper() for c in text if c in 'aeiou'}
print(unique)


def captar(name,last_name,age_user,location):
    while len(name) == 0 or len(last_name) == 0 or age_user <= 0 or len(location) == 0:
        if len(name) == 0:
            print("Este campo de nombre no puede estar vacio")
            name = input("Escribe tu nombre: ")
        elif len(last_name) == 0:
            print("Este campo de apellido no puede estar vacio")
            last_name = input("Escribe tu apellido: ")
        elif age_user == 0:
            print("Este campo de edad no puede estar vacio")
            age_user = int(input("Escribe una edad: "))
        elif len(location) == 0:
            print("Este campo  de direccion no puede estar vacio")
            location = input("Escribe tu direccion")
    collectios = {"Nombre":name,"Apellido":last_name,"Edad":age_user,"Direccion":location}
    just_using = {key:value for key,value in collectios.items()}
    print(f"Gracias", just_using["Nombre"], "por tu colaboracion.")

AQUI UN FORMULARIO BASICO INTEGRANDO VARIOS CONCEPTOS


def run():
    name = input("Escribe tu nombre: ")
    last_name = input("Escribe tu apellido: ")
    age_user = int(input("Escribe tu edad: "))
    location = input("Escribe tu direccion: ")
    captar(name,last_name,age_user,location)

if __name__ == "__main__":
    run()

import random
paises = [“col”,“vzl”,“pan”,“cl”]

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

resultado = {pais:poblacio for (pais,poblacio) in poblacion.items()if poblacio>20}
print(resultado)

texto = "Hola soy camilo"
unico = {c: c.upper()for c in texto if c in “aeiou” }
print(unico)

Notas de clase

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

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

print(population_v2)

result = {country:population for (country, population) in population_v2.items() if population > 500}
print(result)

text = 'Hola, soy Jose'
dict = {c: c.upper() for c in text if c in 'aeiou'}
print(dict)

text = 'Hola, soy Jose'
dict = {c: text.count(c) for c in text if c in 'aeiou'}
print(dict)

Esta es mi solución al reto

frase = 'murcielago'
txt = 'aeuiueiaaaaaaaaaaa'
unico = { caracter: caracter.upper() for caracter in frase if caracter in 'aeiou'}
print(unico)

vocales = ['a', 'e', 'i', 'o', 'u']

vowel = {letra : frase.count(letra) for letra in frase if letra in 'aeiou'} 
print(vowel)

contador_vocales = {char : txt.count(char) for char in txt if char in 'aeiou'}
print(contador_vocales)

Con el ejemplo anterior un ejercicio

personas = ['Alexander', 'Raquel', 'Jose']
edades = [28,29,68]

dict_persona_edad = {personas[i]:edades[i] for i in range(0,len(personas)) if edades[i]>30}
print(dict_persona_edad)

Reto:

text =  'Hola, soy programador'
unique = {c: c.upper() for c in text if c in 'aeiou'}
print(unique)

letter_counts = {}
for letter in unique:
    count = text.count(letter)
    letter_counts[letter] = count

for letter, count in letter_counts.items():
    print(f"{letter}: {count}")

Le recomiendo el libro “Learning Python” escrito por el mismísimo Guido Van Rossum, ahí explica muy bien y con ejemplos.

En lo personal estos temas de list y dictionary comprehesion no los comprendí muy bien. Tratare de buscar otras fuentes de información que me ayuden a entender mejor.

Hice la prueba con mi nombre ‘Hola, soy Eliana’ que comienza con una vocal ‘E’. Cuando hago correr con el método del profesor no cuenta la letra ‘e’ mayúscula, sino sólo minúsculas. Yo escribí el siguiente código y funcionó, en las opciones aumenté las vocales en mayúscula. Pero debe haber otra forma mejor. Si por favor, alguien del curso sabe?

texto = 'Hola, soy Eliana'
vocales = { c: c.upper() for c in texto if c in 'aeiouAEIOU'}
print(vocales)

Si alguien puede indicarme cómo se puede hacer en este caso.

Aplicando la mayúscula y que las cuente.

Muy poco clara esta clase, sería bueno que explicaras la logica de como leer el codigo y de donde sale es comando.items por ejemplo 😦

import random
countries = ['col', 'mex', 'bol', 'pe']

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

result = { country: population for (country, population) in population_v2.items() if population > 50}

print(result)

text = 'Hola, soy Andres'
unique = { c: c.upper() for c in text if c in 'aeiou' }
print(unique)

por que da por sentado, que sabemos, de que ba el metodo items()

En Dictionary Comprehension, la cláusula condition es una expresión opcional que permite filtrar los elementos del iterable antes de ser agregados al diccionario.

Para contar cuantas veces aparece cada vocal:

text = 'Hola, soy Nicolas'
unique = { c: text.count(c) for c in text if c in 'aeiou' }
print(unique)
text = 'Hola, soy Nestor y me gusta programar'
a = 0
e = 0
i = 0
o = 0
u = 0
vowels = {character: character.upper() for character in text if character in 'aeiou'}
print(vowels)

for character in text: # A la antigüita
  if character == 'a':
    a += 1
  elif character == 'e':
    e += 1
  elif character == 'i':
    i += 1
  elif character == 'o':
    o += 1
  elif character == 'u':
    u += 1

print(f'a:{a} e:{e} i:{i} o:{o} u:{u}')

times = {character: text.count(character) for character in text if character in 'aeiou'} 
print(times)

Poluseishon

No voy a mentir, busqué en google cómo contar caracteres dentro de un string y ahí dí con el método .count()

Reto propuesto: Contar la frecuencia de cada vocal:

<
text = 'Hola, soy Ronald'
unique = {c: text.count(c) for c in text if c in 'aeiou'}
print(unique)
> 
# Diccionario que asocia cada país con su continente
continentes = {
    "Argentina": "América del Sur",
    "México": "América del Norte",
    "España": "Europa",
    "China": "Asia",
    "Australia": "Oceanía"
}

# Lista de continentes y países de interés
continentes_interes = ["América del Sur", "Europa", "Oceanía"]
paises_interes = ["Argentina", "Chile", "España", "Francia", "Australia", "Nueva Zelanda"]

# Dictionary comprehension con condicionales según el continente de cada país
paises_por_continente = {pais: continente for pais, continente in continentes.items()
                         if continente in continentes_interes and pais in paises_interes}

# Imprimir el resultado
print(paises_por_continente)

Hola!

Les comparto el código de la clase y la solución al reto final 💚

# Dictionary Comprehension: condition

import random
countries = ["col", "mex", "bol", "peru"]
population_v2 = { country: random.randint(1, 100) for country in countries }

print(population_v2)

# Generar nuevo diccionario con los paises que tengan una poblacion mayor que 20
result = { country: population for(country, population) in population_v2.items() if population > 20 }

print(result)

# Diccionario con las volales de un texto
text = "Hola, soy Sara"
unique = { c: c.upper() for c in text if c in 'aeiou' }
print(unique)

# Diccionario con el contador de apariciones de la vocal en el texto
counts = { c: text.count(c) for c in text if c in 'aeiou' }
print(counts)

aqui les traigo la solución para devolver el diccionario con las vocales contadas

Reto cumplido:
text = 'HI, this is a text’
print({c: text.count© for c in text if c in ‘aeiou’})

Comparto el código de la clase hecho a mi manera. Lo expreso de la siguiente forma para evitar confusión con respecto al llamado de variables y el alcance de las mismas.
.
Primero, se crea una lista de valores, en este caso países (de paso se importa la librería random para los valores al azar):

import random

values = ['ARG','MEX','USA','FRA','JAP','BRA']

Segundo, se incorpora en un diccionario esos países con un valor al azar.
En este caso “i” representa el “índice” que corresponde a cada una de las claves de los valores de un diccionario, el cual se itera para añadir el valor al azar a cada uno de los países.

population = {
    i : random.randint(50,200)
    for i in values
}

Por último, se crea otro diccionario en el cual se itera los pares clave : valor, en este caso i : k teniendo en cuenta los pares del diccionario creado anteriormente (countries), por esa razón se utiliza el método .items(), y se añade la condición de que el valor k sea mayor a 100.

countries = {
    i : k
    for (i, k) in population.items()
    if k > 100
}

Después se imprimen los valores (pongo ambos para comparar).

print(population)
print(countries)

Como resultado me dio lo siguiente (siempre van a dar valores distintos)

{'ARG': 180, 'MEX': 150, 'USA': 189, 'FRA': 128, 'JAP': 92, 'BRA': 95}
{'ARG': 180, 'MEX': 150, 'USA': 189, 'FRA': 128}

Saludos! Espero les sea de utilidad

#Dictionary por compresion con condicion
'''
{key: value for var in iterable if condition}
'''
import random
    
paises=["col","mex","per","bol"]
poblacion={}

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

print(poblacion_v2)


resultado={pais:poblacion for (pais,poblacion) in poblacion_v2.items() if poblacion>20}
print(resultado)

#Un diccionario no puede repetir llaves
text="Hola soy gustav"
unique={c:c.upper() for c in text if c in "aeiou"}
print(unique)

text="Hola soy gustav"
unique={c:text.count(c) for c in text if c in "aeiou"}
print(unique)

Número de veces que se repite cada vocal de la cadena de texto
Solución:
dicc="Hola,soy Nicolas el mejor developer"
resultado2={c:dicc.count© for c in dicc if c in “aeiou”}
print(resultado2)

Aquì, la resolucion del reto que dejò el profe:

import os

text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut pretium dui vel neque suscipit, ut venenatis nisi consectetur. Phasellus sed arcu et nisl auctor lacinia. Curabitur vehicula eget lacus ut vulputate. Suspendisse eleifend ligula vel placerat convallis. Suspendisse sem ex, consequat vel maximus ac, tristique non justo. Ut hendrerit a nunc id blandit. Suspendisse consequat mauris vitae vehicula facilisis. Pellentesque eu lorem nec risus tempus dignissim vel in magna.'

def count_vowels(text):

    unique = {vowel:text.lower().count(vowel) for vowel in text if vowel in 'aeiou'}

    return unique

def main():
    print(count_vowels(text))
    
if __name__ == '__main__':
    os.system('clear')
    main()

//{‘o’: 12, ‘e’: 50, ‘i’: 41, ‘u’: 36, ‘a’: 28}

**texto = “Hola mundito”

vocales = {c.upper(): texto.count© for c in texto if c in “aeiou”}
print(vocales)**

me sirve hacerlo de la forma larga para entenderlo mejor y de alli hacer la forma corta. si intento la forma corta sina ntes la larga me enredo

unique_v2 = {}
for c in text:
    if c in "aeiou":
        unique_v2[c] = text.count(c)
print(unique_v2)
import random
""" dict comprehension conditionaly """

countries = ["ar", "bol", "co", "ecu", "mex"]
populations = {country: random.randint(100, 200) for country in countries}
print(populations)

new_populations = {country: population for (country, population) in populations.items() if population > 140}
print(new_populations)

# Example
text = "She can't help herself at all"
print(text)
dict = {c: text.count(c) for c in text if c in "aeiou"}
print(dict)

Hola, Mi solución al reto:

# Reto
text = "HOLA A TODOS MI NOMBRE ES MIGUEL, y este programa cuenta la cantidad de vocales sin importar las MAYUSCULAS"
unique = {c: text.lower().count(c) for c in text if (c in 'aeiou')}
print(unique)

Ejercicio

Contar el número de apariciones de cada vocal en una frase:

sentence_str = "This is a new Python course"
sentence = sentence_str.lower()

vowels_dict = {letter: sentence.count(letter) for letter in sentence if letter in 'aeiou'}

print(vowels_dict)

✨ Challenge reached ✨

  • Los diccionarios son tipos de datos en Python que nos permiten almacenar datos en pares clave/valor . Por ejemplo:

my_dict = {1: 'apple', 2: 'ball'}

¿Qué es la comprensión de diccionario en Python?

  • La comprensión de diccionarios es una forma elegante y concisa de crear diccionarios.

  • Ejemplo 1: Comprensión de diccionario
    Considere el siguiente código:

square_dict = dict()
for num in range(1, 11):
    square_dict[num] = num*num
print(square_dict)
  • Ahora, creemos el diccionario en el programa anterior usando la comprensión del diccionario.
# dictionary comprehension example
square_dict = {num: num*num for num in range(1, 11)}
print(square_dict)

{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100}

Podriamos usar la función Set al imprimir para que no repita los valores: print(set(unique)) y lo hace muy bien.

text = 'Hola, soy un estudiante de Platzi' unique = { c:c.count(text) for c in text if c in 'aeiou' }

Ejercicio: ¿Puedes hacer un diccionario en el que guardes todas las vocales de una frase y la posición que tienen dentro de la misma frase?

Es decir,
key = posición_en_frase y
valor = vocal_en_frase

RESPUESTA


#Coprehension_list_dict:
lista_a=[]

dicc_b={}

names=["Rico","Renata","Dana"]
Ages=[12,25,32]


list_f= [ lista_a for lista_a in range(1,20)]
print(list_f)

dicc_f={dicc_b for dicc_b in range(0,25)}
print(dicc_f)


dicc_a= {i:i for i in range(1,20)}
print(dicc_a)

dicc_na={name:Age for (name, Age) in zip(names,Ages) }
print(dicc_na)

Puse un poquito más explicito mi ejemplo para enteneder mejor

{ letra : texto.count(letra) for letra in text if letra in 'aeiou' }

En la primera parte letra : texto.count() estoy poniendo que de lado izquierdo aparezca la letra y el derecho la cantidad de veces que esta esa letra en el texto.

Mi for letra in text itera en cada letra del texto, por eso la variable la llame letra.

Por ultimo esta la condicional donde si el valor de la variable letra se encuentra en el texto 'aeiou' que significa que si es por que es vocal, si agrege la primera parte.

Esta genial un Dictionary Comprenhensions de otro!

Lo que me quedo de las condiciones en Dictionary Comprehension es que para hacer una condición necesitas previamente tener un Dictionary Comprehension y de ahí hacer otro con las condiciones:

import random

contries_mercosur = ['ar','br','pr','uy']

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


pop_v2 = {country: population for(country, population) in pop_v2.items() if population >= 90}
print(pop_v2)

Reto cumplido:

Me muestra la cantidad de caracteres existentes en el texto.

amount   = {c: text.count(c) for c in text }

Cantidad de cada una de las letras en el texto pero que están en la condición.

amount2 = {c: text.count(c) for c in text if c in 'aeiouáéíóú'} 

Mi pratica:
receta = [“Sopa”, “Pasta”, “Arroz”, “Ensalada”]
dificultad = [“Facil”, “Medio”, “Dificil”, “Muy Dificil”]

recetas = { dificultad: receta for (dificultad, receta) in zip(dificultad, receta)}
print(recetas)

{‘Facil’: ‘Sopa’, ‘Medio’: ‘Pasta’, ‘Dificil’: ‘Arroz’, ‘Muy Dificil’: ‘Ensalada’}

También se podría evitar el uso de if
(Basado en la solución de Terry):

text = 'aeioiazuaziozsiu'
unique = {vowel : text.count(vowel) for vowel in 'aeiou'}

Salida:

{'a': 3, 'e': 1, 'i': 4, 'o': 2, 'u': 2}

De esta forma se evita iterar en sobre la cadena larga de text, en su lugar solo sobre un iterable más pequeño; además de evitar un cómputo extra sin la condicional