Autor
|
Tema: Invertir claves de un diccionario por comprensión en python. (Leído 5,372 veces)
|
jam man
Desconectado
Mensajes: 32
|
Hola. Como indico en el titulo, estoy haciendo un diccionario por comprensión, este es mi código. abc = dict([(x, (x+5)**2) for x in range(1,28)]) 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
Mensajes: 1.286
No es lo mismo conocer el camino que recorrerlo.
|
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: abc = dict([(x, (str((x+5)**2)).zfill(4)) for x in range(1,28)]) print (abc)
|
|
« Última modificación: 22 Septiembre 2015, 12:16 pm por tincopasan »
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
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#zipPara 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.zfillAquí tienes un ejemplo: # -*- coding: Windows-1252 -*- 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() keyValuePairs = [ ((charSet[value]), str((value+5)**2).zfill(4)) for value in range(0, len(charSet)) ] for (key, value) in keyValuePairs: print key, value
Resultado de ejecución: 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
Mensajes: 32
|
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. {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í: {a:36, 2:49, ... z:1024}
eso es lo que tiene que hacer el programa.
|
|
|
En línea
|
|
|
|
explorer
Conectado
Mensajes: 102
Analista/Programador Perl
|
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#chrY para poner los '0' delanteros, se puede usar format (%) https://docs.python.org/2/library/stdtypes.html#string-formatting-operationsSería algo así: 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):
|
|
« Última modificación: 24 Septiembre 2015, 00:36 am por explorer »
|
En línea
|
|
|
|
jam man
Desconectado
Mensajes: 32
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Comprensión de lista en python
Scripting
|
Joe Fraddy
|
2
|
3,144
|
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,931
|
22 Septiembre 2015, 10:30 am
por Eleкtro
|
|
|
Invertir una función en Python.
Scripting
|
jam man
|
4
|
3,515
|
14 Octubre 2015, 14:44 pm
por jam man
|
|
|
Python - Comprensión de listas vs map/filter (duda)
Programación General
|
tzinm
|
3
|
4,084
|
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
|
4,426
|
10 Octubre 2022, 20:55 pm
por El mas antiguo
|
|