使用映射到数字的字母字符创建字典
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 更易读。
我想在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 更易读。