2014-01-23 58 views
2

我想在python中迭代列表。該列表是內置的,從string被稱爲ascii_lowercase。我正在嘗試創建一個可容納所有英文字母的dictionary,並且每當要將字母添加到字典中時,我也想爲該字母表指定一個特定的數字。在同時增加另一個變量的同時遍歷列表

最近,我試圖做到這一點:

alphabets = {for (x,j) in [(x,j) for x in ascii_lowercase for j in range(len(ascii_lowercase))]} 

,但沒有運氣。任何人都可以幫助我爲這種類型的事物創建表達式嗎?

爲了更這裏清除它就是我想要的:

{'a':1, 'b':2, ... } 

回答

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)) 
+0

非常感謝。我知道這是一個很好的答案,但無論如何它都會更加優化?如果沒有問題,請告訴我! :) –

+0

就我個人而言,我會與最後一個去。 – inspectorG4dget

+1

你最後的例子將索引作爲關鍵字,而字母是值 - 不是你想要的。 –

3

您可以使用enumerate來幫助你在這裏:

alphabet = dict((v, k) for k, v in enumerate(ascii_lowercase, 1)) 
4

只是用枚舉,並切換索引和信用字典-理解:

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 

枚舉解決方案最快。