Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: PUAROT en 2 Abril 2017, 00:09 AM

Título: Generador de diccionario en Python
Publicado por: PUAROT en 2 Abril 2017, 00:09 AM
he visto que se pueden crear diccionarios con expresiones generadoras, y me he puesto a practicar :-P
El caso es que me he propuesto crear un diccionario con los valores del 1 al 100 donde la clave sea un numero impar y el valor el par. {1:2,3:4....}

he intentado crear una expresion generadora por si sola y no he sido capaz, lo mas cerca que he estado es :
Código (python) [Seleccionar]
c = {x:y for x in range(30) if x % 2 != 0 for y in range(30) if y % 2 == 0}

pero el resultado no es el esperado por mi
por lo que he pensado en hacer un generador para los numeros pares y otro para los impares :
Código (python) [Seleccionar]
a = (i for i in range(100) if i % 2 == 0)

b = (i for i in range(100) if i % 2 != 0)

y después crear el diccionario con un bucle for :
Código (python) [Seleccionar]
for i in a:
for j in b:
c[i] = j

pero el resultado tampoco es el esperado por mi y me doy cuenta de que no es la logica correcta, así que intento :
Código (python) [Seleccionar]
for x in a, y in b:
c[x] = y

Estoy seguro de que es mucho mas facil de lo que yo estoy intentando, pero no encuentro la forma adecuada.
En que estoy fallando ?
Título: Re: Generador de diccionario en Python
Publicado por: PUAROT en 4 Abril 2017, 20:39 PM
He encontrado la forma de hacerlo, creo que es un poco chapucera, ya que estoy seguro que hay una forma mejor de hacerlo, pero...

Código (python) [Seleccionar]
a = (i for i in range(100) if i % 2 == 0)
b = (i for i in range(100) if i % 2 != 0)
c = {}
for x in a:
    c[x]=next(b)
Título: Re: Generador de diccionario en Python
Publicado por: tincopasan en 5 Abril 2017, 04:57 AM
la verdad no se bien cual es el planteo general, pero una forma de obtener ese resultado en una línea:
Código (python) [Seleccionar]
c = {x:x+1 for x in range(100) if x %2 != 0 }
Título: Re: Generador de diccionario en Python
Publicado por: PUAROT en 5 Abril 2017, 20:23 PM
Gracias por contestar, no había caído en hacerlo así.

El planteamiento es poder crear un diccionario con una condición para el key y otra para el value por ejemplo en el key los pares y el otro los múltiplos de tres

Título: Re: Generador de diccionario en Python
Publicado por: tincopasan en 6 Abril 2017, 19:11 PM
Citar
Publicado por: PUAROT
He encontrado la forma de hacerlo, creo que es un poco chapucera, ya que estoy seguro que hay una forma mejor de hacerlo, pero...

Código

    a = (i for i in range(100) if i % 2 == 0)
    b = (i for i in range(100) if i % 2 != 0)
    c = {}
    for x in a:
        c
  • =next(b)
una de las cosas que me gusta de python es que te permite resolver un planteo de muchas formas, te muestro otra con respecto a tu código:
Código (python) [Seleccionar]

a = (i for i in range(100) if i % 2 == 0)
b = (i for i in range(100) if i % 2 != 0)
c = {a:b for a,b in zip(a,b)}

 
Título: Re: Generador de diccionario en Python
Publicado por: PUAROT en 6 Abril 2017, 21:45 PM
 ;-) ;-) ;-) ;-)

El zip es lo que me faltaba...

voy a buscar que usos tiene y como se usa, que no lo he usado nunca y no lo controlo

Muchas gracias !!!
Título: Re: Generador de diccionario en Python
Publicado por: Once en 8 Abril 2017, 21:04 PM
Hola chicos, sé que ya está resuelta la duda, pero hay una forma más fácil de hacer, teniendo en cuenta que los números pares están dados por la expresion: 2n y los impares por 2n+1:

Código (python) [Seleccionar]
{2*x: 2*x+1 for x in range(100)}

Saludos!
Título: Re: Generador de diccionario en Python
Publicado por: PUAROT en 9 Abril 2017, 00:49 AM
Muchas gracias !!!
Como bien se dice por aquí, no hay una sola forma de hacer las cosas :-)

Me ha gustado la forma de plantear el problema!!
Sabia yo que era mucho mas facil de lo que parecia :P