elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Invertir claves de un diccionario por comprensión en python.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Invertir claves de un diccionario por comprensión en python.  (Leído 5,059 veces)
jam man

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Invertir claves de un diccionario por comprensión en python.
« en: 22 Septiembre 2015, 05:49 am »

Hola. Como indico en el titulo, estoy haciendo un diccionario por comprensión, este es mi código.

Código
  1. abc = dict([(x, (x+5)**2) for x in range(1,28)])
  2. print abc

y pues quiero que en vez de que las claves sean números que sean las letras del abecedario, por eso el rango de 1 hasta 28, y una vez reemplazada la clave agregar dos ceros al valor de cada clave es decir, si el valor es "36", quedaría como "0036" y si el valor tiene tres números ya solo se le agregaría un cero, ej: "961", seria "0961", y  se el valor ya cuenta con 4 dígitos o números no se agrega nada.


En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: Invertir claves de un diccionario por comprensión en python.
« Respuesta #1 en: 22 Septiembre 2015, 11:14 am »

no entendí nada! lo único que creo entender es lo de los 0, quizá deberías sacar el largo de la cadena(clave según vos) y si es menor a 4, pues agregar los 0 necesarios para que cumpla ese requisito.

edito: supongo que queres hacer todo en una línea, bueno puede ser también algo como esto:
Código
  1. abc = dict([(x, (str((x+5)**2)).zfill(4)) for x in range(1,28)])
  2. print (abc)


« Última modificación: 22 Septiembre 2015, 12:16 pm por tincopasan » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.813



Ver Perfil
Re: Invertir claves de un diccionario por comprensión en python.
« Respuesta #2 en: 22 Septiembre 2015, 13:26 pm »

por eso el rango de 1 hasta 28

El abecedario Inglés se compone de 26 letras, mientras que el Español de 27, así que viendo tu búcle asumiré que intentas incluir la "Ñ", por ende, omitiré sugerirte soluciones que serían más simples si tu intención fuese utilizar el abecedario Inglés, haciendo uso de la función Zip.
https://docs.python.org/2/library/functions.html#zip

Para el primer problema, puedes declarar un set de caraceres, y para el segundo problema, puedes usar la función string.zfill() aka zerofill.
https://docs.python.org/2/library/string.html#string.zfill

Aquí tienes un ejemplo:
Código
  1. # -*- coding: Windows-1252 -*-
  2.  
  3. charSet = 'a b c d e f g h i j k l m n \xf1 o q r s t u v w x y z'.split()
  4.  
  5. keyValuePairs = [
  6.    ((charSet[value]), str((value+5)**2).zfill(4))
  7.    for value in range(0, len(charSet))  
  8. ]
  9.  
  10. for (key, value) in keyValuePairs:
  11.    print key, value


Resultado de ejecución:
Citar
a 0025
b 0036
c 0049
d 0064
e 0081
f 0100
g 0121
h 0144
i 0169
j 0196
k 0225
l 0256
m 0289
n 0324
ñ 0361
o 0400
q 0441
r 0484
s 0529
t 0576
u 0625
v 0676
w 0729
x 0784
y 0841
z 0900

Saludos
« Última modificación: 22 Septiembre 2015, 13:36 pm por Eleкtro » En línea

jam man

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Re: Invertir claves de un diccionario por comprensión en python.
« Respuesta #3 en: 22 Septiembre 2015, 14:37 pm »

Muchas gracias por sus comentarios, me ha servido bastante, muchas gracias. Lo que no me expliqué bien fue lo de cambiar las claves que son números por letras del abecedario.

Al ejecutar el código que tenía me salía esto.

Código
  1. {1:36, 2:49, .... 27:1024}

pero como el usuario tiene que introducir cualquier frase para hacer un tipo cifrado se tendría que cambiar la clave o key y quedaría así:

Código
  1. {a:36, 2:49, ... z:1024}

eso es lo que tiene que hacer el programa.
En línea

explorer

Desconectado Desconectado

Mensajes: 101


Analista/Programador Perl


Ver Perfil
Re: Invertir claves de un diccionario por comprensión en python.
« Respuesta #4 en: 23 Septiembre 2015, 16:07 pm »

Con la función chr() puedes convertir un entero en un carácter cuyo código ASCII es el indicado por el entero.

https://docs.python.org/2/library/functions.html#chr

Y para poner los '0' delanteros, se puede usar format (%)

https://docs.python.org/2/library/stdtypes.html#string-formatting-operations

Sería algo así:
Código
  1. print dict([ (chr(x), '%04d' % (x-ord('a')+6)**2) for x in range(ord('a'), ord('z')+1) ])
Sale:

{'a': '0036', 'c': '0064', 'b': '0049', 'e': '0100', 'd': '0081', 'g': '0144', 'f': '0121', 'i': '0196', 'h': '0169', 'k': '0256', 'j': '0225', 'm': '0324', 'l': '0289', 'o': '0400', 'n': '0361', 'q': '0484', 'p': '0441', 's': '0576', 'r': '0529', 'u': '0676', 't': '0625', 'w': '0784', 'v': '0729', 'y': '0900', 'x': '0841', 'z': '0961'}

En Perl quedaría casi igual (pero más corto, claro):
Código
  1. %codigo = map { $_ => sprintf "%04d", (ord($_)-ord("a")+6)**2 } "a".."z"
« Última modificación: 24 Septiembre 2015, 00:36 am por explorer » En línea

jam man

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Re: Invertir claves de un diccionario por comprensión en python.
« Respuesta #5 en: 10 Octubre 2015, 23:09 pm »

Y como hago para que busca alguna palabra especifica? por ejemplo si ingreso solo la letra A, que me imprima su valor que es 0036, y cuando sea una frase?
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Comprensión de lista en python
Scripting
Joe Fraddy 2 2,791 Último mensaje 18 Febrero 2015, 00:15 am
por Joe Fraddy
MOVIDO: Invertir claves de un diccionario por comprensión en python.
Programación General
Eleкtro 0 1,771 Último mensaje 22 Septiembre 2015, 10:30 am
por Eleкtro
Invertir una función en Python.
Scripting
jam man 4 3,246 Último mensaje 14 Octubre 2015, 14:44 pm
por jam man
Python - Comprensión de listas vs map/filter (duda)
Programación General
tzinm 3 3,724 Último mensaje 2 Agosto 2021, 23:50 pm
por tzinm
Obtener el número mayor con comprensión de listas en Python.
Scripting
El mas antiguo 9 3,966 Último mensaje 10 Octubre 2022, 20:55 pm
por El mas antiguo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines