8

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

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

我正在尝试使我的代码更好,我的问题是,有没有更短的方法可以在不输入所有这些数字的情况下做到这一点?

4

5 回答 5

17

你可以string.ascii_lowercase在这里使用和听写理解。

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))
于 2013-02-15T20:37:08.897 回答
6
aDict = dict(zip('abcdefghijklmnopqrstuvwxyz', range(1, 27)))

或者代替硬编码字母表:

import string
aDict = dict(zip(string.ascii_lowercase, range(1, 27)))
于 2013-02-15T20:37:02.073 回答
2

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

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

如果您使用的是 Python 2.7 或更高版本,则可以使用字典理解

d = {c : i for i, c in enumerate(ascii_lowercase, 1)}
于 2013-02-15T20:38:16.300 回答
1

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

>>> ord('a')
97

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

for i in range(97, 97+26):
    x[chr(i)] = i - 96 
于 2013-02-15T20:41:44.703 回答
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))
于 2013-02-15T20:42:27.480 回答