Pregunta

Quiero asignar un valor a cada letra del alfabeto, de modo que a -> 1, b -> 2, c -> 3, ...z -> 26.Algo así como una función que devuelve el valor de la letra, por ejemplo:

value('a') = 1

value('b') = 2

etc...

¿Cómo puedo hacer esto en python?

¿Fue útil?

Solución

Quieres un diccionario nativo de Python.

(y es probable que también desee que sus valores comiencen desde "0", no de "1", por lo que puede anular agregar un +1 en todas sus asignaciones, como bramando)

construir uno con esto:

import string
values = dict()
for index, letter in enumerate(string.ascii_lowercase):
   values[letter] = index + 1

Esto le da cosas a SYOU:

print values["a"]
-> 1

Por supuesto, probablemente podría usar la función incorporada de "ORD" y salta este diccionario en conjunto, como en las otras respuestas:

print ord("c") - (ord("a")) + 1

o en Python 3.x o 2.7, puede crear el DICIONARIO en una sola pasada con una expresión del generador DICT:

values = {chr(i): i + 1 for i in range(ord("a"), ord("a") + 26)}

Otros consejos

Si usted sólo quiere mapa de caracteres de ASCII alfabeto y números, puede utilizar ord() y, a continuación, ajustar el resultado:

>>> ord('a') - 96
1

Si quieres que esto funcione para las letras mayúsculas también:

>>> ord('A'.lower()) - 96
1

También, usted puede ser que desee para validar que el argumento es de hecho un carácter ASCII:

>>> char = 'a'
>>> len(char) == 1 and char.isalpha() and 'a' <= char <= 'z'
True

O:

>>> import string
>>> len(char) == 1 and char in string.ascii_lowercase
True
def value(letter):
    return ord(letter) - ord('a') + 1

Use una Diccionario para llave: pares de valor.Aunque para un simple mapeo como este, probablemente hay algunas formas inteligentes de hacer esto.

from itertools import count
from string import lowercase
value = dict(zip(lowercase, count(1))).get

Debe explotar el hecho de que 'A', 'B', etc. Tienen valores ASCII detrás de ellos.

ord('a') # this returns int 97
ord('b') # this returns int 98

Por lo tanto, podrías hacer algo así:

ord(letter) - ord('a') + 1 # e.g., a: 97 - 97 + 1 = 1

¿Por qué no solo hacer una lista de cada letra en el alfabeto y luego use los valores de índice como el valor de retorno

¿Qué hay de esto?

import string
value = lambda x: string.ascii_lowercase.index(x) + 1

In [1]: value("a")
Out[1]: 1

No es necesario importar una biblioteca.Puedes usar esto:

value = dict(zip("abcdefghijklmnopqrstuvwxyz", range(1,27)))

Puede usar la función incorporada de ORD.Esta función bien haga lo que está buscando

def letter_value(letter):
    return ord(letter) - ord("a") + 1

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top