python: Как мне присвоить значения буквам? - PullRequest
6 голосов
/ 14 июля 2010

Я хочу присвоить значение каждой букве в алфавите, чтобы a -> 1, b -> 2, c -> 3, ... z -> 26. Что-то вроде функции, которая возвращает значение буква, например:

value('a') = 1

value('b') = 2

и т.д ...

Как бы я поступил так на Python?

Ответы [ 8 ]

9 голосов
/ 14 июля 2010

Вы хотите собственный словарь Python.

(и вы, вероятно, также хотите, чтобы ваши значения начинались с "0", а не с "1", поэтому вы можете отказаться от добавления +1 на все ваши отображения, как показано ниже)

Постройте один с этим:

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

Это дает такие вещи, как:

print values["a"]
-> 1

Конечно, вы, вероятно, могли бы использовать встроенную функцию ord и вообще пропустить этот словарь, как в других ответах:

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

Или в python 3.x или 2.7 вы можете создать дисионар за один проход с выражением генератора диктов:

values = {chr(i): i + 1 for i in range(ord("a"), ord("a") + 26)}
5 голосов
/ 14 июля 2010

Если вы просто хотите отобразить символы алфавита ASCII на цифры, вы можете использовать ord() и затем скорректировать результат:

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

Если вы хотите, чтобы это работало и для заглавных букв:

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

Также вы можете проверить, что аргумент действительно является единственным символом ASCII:

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

Или:

>>> import string
>>> len(char) == 1 and char in string.ascii_lowercase
True
3 голосов
/ 14 июля 2010
def value(letter):
    return ord(letter) - ord('a') + 1
2 голосов
/ 14 июля 2010
from itertools import count
from string import lowercase
value = dict(zip(lowercase, count(1))).get
2 голосов
/ 14 июля 2010

Используйте словарь для пар ключ: значение.Хотя для такого простого картирования, вероятно, есть несколько умных способов сделать это.

0 голосов
/ 14 июля 2010

Как насчет этого?

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

In [1]: value("a")
Out[1]: 1
0 голосов
/ 14 июля 2010

Почему бы просто не составить список каждой буквы в алфавите, а затем использовать значения индекса в качестве возвращаемого значения

0 голосов
/ 14 июля 2010

Вы должны использовать тот факт, что за 'a', 'b' и т. Д. Стоят ASCII-значения.

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

Следовательно, вы можете сделать что-то вроде:

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