Foro de elhacker.net

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.
Código:
{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
  1. 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
  1. a = (i for i in range(100) if i % 2 == 0)
  2.  
  3. b = (i for i in range(100) if i % 2 != 0)
y después crear el diccionario con un bucle for :
Código
  1. for i in a:
  2. for j in b:
  3. 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
  1. for x in a, y in b:
  2. 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
  1. a = (i for i in range(100) if i % 2 == 0)
  2. b = (i for i in range(100) if i % 2 != 0)
  3. c = {}
  4. for x in a:
  5.    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
  1. 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
  1. a = (i for i in range(100) if i % 2 == 0)
  2. b = (i for i in range(100) if i % 2 != 0)
  3. c = {a:b for a,b in zip(a,b)}
  4.  
 


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
  1. {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