使用映射到数字的字母字符创建字典

Create dictionary with alphabet characters mapping to numbers

我想在Python中写一个代码,为每个字母字符分配一个数字,像这样:a=0, b=1, c=2, ..., y=24, z=25。我个人不喜欢为每个字母设置条件,也不希望我的代码看起来设计过度。我想知道我能以最短(意味着最短的代码行)、最快和最简单的方式做到这一点。 (我的想法是为此目的创建一个字典,但我想知道是否有更简洁更好的方法)。 提前感谢任何建议和提示。

你肯定需要一个字典,而不是将每个声明为变量。一种简单的方法是使用带有 string.ascii_lowercase 的字典理解为:

from string import ascii_lowercase

{v:k for k,v in enumerate(ascii_lowercase)}
# {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5...

已有数字与角色相关联。您可以将这些代码点与 ord().
一起使用 一个简短的(就行而言)解决方案是:

num_of = lambda s: ord(s) - 97

普通函数会更容易阅读:

def num_of(s):
    return ord(s) - 97

用法:

num_of("a") # 0
num_of("z") # 25

如果它必须是字典,您可以创建它而无需像这样导入:

{chr(n):n-97 for n in range(ord("a"), ord("z")+1)}

这是我的两分钱,for 循环将完成工作:

d = {} #empty dictionary

alpha = 'abcdefghijklmnopqrstuvwxyz'

for i in range(26):
    d[alpha[i]] = i #assigns the key value as alphabets and corresponding index value from alpha string as the value for the key

print(d) #instant verification that the dictionary has been created properly

One-liner 使用地图和枚举:

# given
foo = 'abcxyz'
dict(enumerate(foo))

# returns: {0: 'a', 1: 'b', 2: 'c', 3: 'x', 4: 'y', 5: 'z'}

如果你需要用字符作为字典键,我想到的是字典理解...

{letter:num for (num,letter) in enumerate(foo) }

# returns {'a': 0, 'b': 1, 'c': 2, 'z': 3, 'y': 4, 'x': 5}

...或 lambda...

dict( map(lambda x: (x[1],x[0]), enumerate(foo)) )

# returns {'a': 0, 'b': 1, 'c': 2, 'z': 3, 'y': 4, 'x': 5}

我觉得字典理解比 map+lambda+enumerate 更易读