如何以简洁的方式创建一个字母作为键的字典?

时间:2013-02-15 20:34:18

标签: python dictionary

我创建了26个字母的字典,如下所示:

aDict={
    "a": 1,
    "b": 2,
    "c": 3,
    "d": 4,
    etc...
}

我正在努力让我的代码更好,我的问题是, 如果没有输入所有这些数字,有没有更短的方法呢?

6 个答案:

答案 0 :(得分:18)

你可以在这里使用string.ascii_lowercase和dict comprehension。

In [4]: from string import ascii_lowercase as al

对于Python 2.7 +:

In [5]: dic = {x:i for i, x in enumerate(al, 1)}

对于Python 2.6或更早版本:

In [7]: dic = dict((y, x) for x, y in enumerate(al, 1))

答案 1 :(得分:6)

aDict = dict(zip('abcdefghijklmnopqrstuvwxyz', range(1, 27)))

或者不是对字母表进行硬编码:

import string
aDict = dict(zip(string.ascii_lowercase, range(1, 27)))

答案 2 :(得分:2)

试试这个,它适用于Python 2.6及更早版本:

from string import ascii_lowercase
d = {}
for i, c in enumerate(ascii_lowercase, 1):
    d[c] = i

如果您使用的是Python 2.7或更高版本,则可以使用dictionary comprehension

d = {c : i for i, c in enumerate(ascii_lowercase, 1)}

答案 3 :(得分:1)

您可以使用ord()函数找到字符的ascii值,反之为chr()

>>> ord('a')
97

然后,您可以从ascii值创建字典,如下所示:

for i in range(97, 97+26):
    x[chr(i)] = i - 96 

答案 4 :(得分:1)

Python 2.7及以上版本:

import string

letters = {k: v for v, k in enumerate(string.ascii_lowercase, 1)}

Python 2.6及以下版本:

import string

letters = dict((k, v) for v, k in enumerate(string.ascii_lowercase, 1))

答案 5 :(得分:0)

dict([(chr(i),i-96) for i in range(97,123)])

但我喜欢@Ashwini Chaudhary的方法:看起来更干净。