python:如何为字母赋值?

时间:2010-07-14 12:52:46

标签: python string mapping letters

我想为字母表中的每个字母指定一个值,以便a - > 1,b - > 2,c - > 3,... z - > 26.像函数一样返回字母值的东西,例如:

value('a') = 1

value('b') = 2

等...

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

10 个答案:

答案 0 :(得分:9)

你想要一个原生的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生成器表达式在单个传递中创建dicionary:

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

答案 1 :(得分:5)

如果您只想将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

答案 2 :(得分:3)

def value(letter):
    return ord(letter) - ord('a') + 1

答案 3 :(得分:2)

对密钥:值对使用dictionary。虽然对于像这样的简单映射,可能有一些聪明的方法来做到这一点。

答案 4 :(得分:2)

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

答案 5 :(得分: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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

这个怎么样?

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

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

答案 8 :(得分:0)

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

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

答案 9 :(得分:0)

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

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