我正在尝试迭代python中的列表。该列表是内置的,在ascii_lowercase
中称为string
。我正在尝试创建一个dictionary
来保存所有英文字母,每当字母表添加到字典中时,我也想为该字母表分配一个特定的数字。
最近,我尝试过这样做:
alphabets = {for (x,j) in [(x,j) for x in ascii_lowercase for j in range(len(ascii_lowercase))]}
但没有运气。任何人都可以帮我创建这种类型的表达式吗?
要清除它,这就是我想要的:
{'a':1, 'b':2, ... }
答案 0 :(得分:4)
from string import ascii_lowercase
alphabets = dict(zip(ascii_lowercase, range(1,27)))
输出:
>>> alphabets
{'f': 6, 'g': 7, 'd': 4, 'e': 5, 'b': 2, 'c': 3, 'a': 1, 'n': 14, 'o': 15, 'l': 12, 'm': 13, 'j': 10, 'k': 11, 'h': 8, 'i': 9, 'v': 22, 'w': 23, 't': 20, 'u': 21, 'r': 18, 's': 19, 'p': 16, 'q': 17, 'z': 26, 'x': 24, 'y': 25}
其他方式:
{char:i for char,i in zip(ascii_lowercase, range(1,27))}
OR
answer = {}
for i,char in enumerate(ascii_lowercase):
answer[char] = i+1
OR
dict((char,i) for i,char in enumerate(ascii_lowercase, 1))
答案 1 :(得分:4)
只需使用enumerate,并使用dict-comprehension切换索引和字母:
alphabets = {a: i for i, a in enumerate(ascii_lowercase, 1)}
定时:
>python -mtimeit "from string import ascii_lowercase" "dict(zip(ascii_lowercase, range(1,27)))"
100000 loops, best of 3: 5.54 usec per loop
>python -mtimeit "from string import ascii_lowercase" "{char:i for char,i in zip(ascii_lowercase, range(1,27))}"
100000 loops, best of 3: 6.07 usec per loop
>python -mtimeit "from string import ascii_lowercase" "{a: i for i, a in enumerate(ascii_lowercase, 1)}"
100000 loops, best of 3: 4.84 usec per loop
枚举解决方案最快。
答案 2 :(得分:3)
您可以使用enumerate
来帮助您:
alphabet = dict((v, k) for k, v in enumerate(ascii_lowercase, 1))