简体词典PYTHON

2024-04-27 05:10:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个字典,它将字母表中的每个字母都设置为它的数值,例如a:1这样。在

alphabet = dict([ (chr(97+i), i+1) for i in range(0, 26) ])

但是,我需要从a循环中得到一次,所以我必须再重复一次。如果不手工写字典,我该怎么做呢?在


Tags: infor字典字母rangedict字母表数值
3条回答

为了完整性,由于没有人给出保留键值角色的答案,我给出了一个这样做的例子。在

同一个键不可能有多个值,但是,可以使用一个iterable值作为值,该值可用于模拟每个键的多个值:

>>> alphabet = {chr(i + 97): itertools.count(i + 1, 26) for i in range(0, 26)}
>>> a = alphabet["a"]
>>> next(a)
1
>>> next(a)
27

这里我使用的是字典理解法,因为它更易于阅读-如果您使用的是非常旧的Python版本,则可能需要使用:

^{pr2}$

字典不能有指向不同值的重复键,因此d = {'a': 1, 'a': 27}将不起作用。但是你可以反过来,这样键就是你的号码。。。类似这样的方法会起作用:

import string

d = {}

for i, l in enumerate(string.ascii_lowercase):
    d[i+1] = l
    d[i+27] = l

结果:

^{pr2}$

你真的不想这么做!字典不能有重复的键,这使得这实际上是不可能的。在

>>> d = {'a': 1, ..., 'a':27}  # doesn't work the way you think it does!
>>> d
{'a': 27}  # where'd the a->1 mapping go!

相反,您应该编写一个执行查找的函数,并使用模运算符%来“包装”范围。在

^{pr2}$

然后,不要做d[27]并得到'a',而是做char_lookup(27)。在

正如Lattyware在评论中指出的那样,您可能试图获得给定字符的一系列值,而不是给定一系列值的字符。在这种情况下,您可以做如下操作:

import string
d = {ch:[i, i+26] for i,ch in enumerate(string.ascii_lowercase, start=1)}

d然后看起来像:

{'a': [1, 27], 'b': [2, 28], ...}

相关问题 更多 >