6

我想为字母表中的每个字母分配一个值,以便 a -> 1, b -> 2, c -> 3, ... z -> 26。类似于返回字母值的函数,例如:

value('a') = 1

value('b') = 2

ETC...

我将如何在 python 中执行此操作?

4

10 回答 10

11

你想要一个本机 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 中,您可以使用 dict 生成器表达式一次性创建字典:

values = {chr(i): i + 1 for i in range(ord("a"), ord("a") + 26)}
于 2010-07-14T13:15:22.503 回答
6

如果您只想将 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
于 2010-07-14T12:55:24.767 回答
3
def value(letter):
    return ord(letter) - ord('a') + 1
于 2010-07-14T12:55:29.303 回答
2
from itertools import count
from string import lowercase
value = dict(zip(lowercase, count(1))).get
于 2010-07-14T16:20:45.800 回答
2

为键:值对使用字典。尽管对于像这样的简单映射,可能有一些聪明的方法可以做到这一点。

于 2010-07-14T12:54:45.703 回答
0

您应该利用“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
于 2010-07-14T12:55:38.247 回答
0

为什么不直接列出字母表中的每个字母,然后使用索引值作为返回值

于 2010-07-14T12:55:46.400 回答
0

这个怎么样?

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

In [1]: value("a")
Out[1]: 1
于 2010-07-14T12:57:37.643 回答
0

您可以使用 ord 内置函数。此功能可以很好地满足您的需求

def letter_value(letter):
    return ord(letter) - ord("a") + 1
于 2019-12-30T19:52:30.177 回答
0

不需要导入库。你可以使用这个:

value = dict(zip("abcdefghijklmnopqrstuvwxyz", range(1,27)))
于 2019-12-30T18:24:57.647 回答