【发布时间】:2014-08-20 22:43:42
【问题描述】:
我创建了一个包含 26 个字母的字典,如下所示:
aDict={
"a": 1,
"b": 2,
"c": 3,
"d": 4,
etc...
}
我正在努力使我的代码更好,我的问题是, 有没有更短的方法可以在不输入所有这些数字的情况下做到这一点?
【问题讨论】:
标签: python dictionary
我创建了一个包含 26 个字母的字典,如下所示:
aDict={
"a": 1,
"b": 2,
"c": 3,
"d": 4,
etc...
}
我正在努力使我的代码更好,我的问题是, 有没有更短的方法可以在不输入所有这些数字的情况下做到这一点?
【问题讨论】:
标签: python dictionary
您可以在此处使用string.ascii_lowercase 和dict理解。
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))
【讨论】:
dic?
aDict = dict(zip('abcdefghijklmnopqrstuvwxyz', range(1, 27)))
或者代替硬编码字母表:
import string
aDict = dict(zip(string.ascii_lowercase, range(1, 27)))
【讨论】:
itertools.count(1)或range(1, 1+len(string.ascii_lowercase))。
试试这个,它适用于 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)}
【讨论】:
使用ord()函数可以找到一个字符的ascii值,反之为chr():
>>> ord('a')
97
然后您可以从 ascii 值创建字典,如下所示:
for i in range(97, 97+26):
x[chr(i)] = i - 96
【讨论】:
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))
【讨论】: