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

value('a') = 1

value('b') = 2

ETC...

我将如何在 python 中做到这一点?

有帮助吗?

解决方案

你想要一个本地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 Generator表达式创建单个通行证中的Dicionary:

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

其他提示

如果您只想将 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
def value(letter):
    return ord(letter) - ord('a') + 1
.

使用一个字典用于键:值对。虽然对于像这样的简单映射,可能有一些聪明的方式这样做。

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

你应该利用'a','b'等的事实。

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

因此,您可以做一些如下:

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

为什么不只是在字母表中制作每个字母的列表,然后使用索引值作为返回值

怎么样?

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

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

没有必要导入库。您可以使用以下方式:

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

您可以使用ORD内置功能。这函数很好地做到你正在寻找的东西

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top