在同时递增另一个变量的同时迭代列表

时间:2014-01-23 16:38:43

标签: python loops dictionary expression

我正在尝试迭代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, ... }

3 个答案:

答案 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))