2024-04-27 05:10:06 发布
网友
我正在寻找一个字典,它将字母表中的每个字母都设置为它的数值,例如a:1这样。在
alphabet = dict([ (chr(97+i), i+1) for i in range(0, 26) ])
但是,我需要从a循环中得到一次,所以我必须再重复一次。如果不手工写字典,我该怎么做呢?在
为了完整性,由于没有人给出保留键值角色的答案,我给出了一个这样做的例子。在
同一个键不可能有多个值,但是,可以使用一个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版本,则可能需要使用:
字典不能有指向不同值的重复键,因此d = {'a': 1, 'a': 27}将不起作用。但是你可以反过来,这样键就是你的号码。。。类似这样的方法会起作用:
d = {'a': 1, 'a': 27}
import string d = {} for i, l in enumerate(string.ascii_lowercase): d[i+1] = l d[i+27] = l
结果:
你真的不想这么做!字典不能有重复的键,这使得这实际上是不可能的。在
>>> d = {'a': 1, ..., 'a':27} # doesn't work the way you think it does! >>> d {'a': 27} # where'd the a->1 mapping go!
相反,您应该编写一个执行查找的函数,并使用模运算符%来“包装”范围。在
%
然后,不要做d[27]并得到'a',而是做char_lookup(27)。在
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然后看起来像:
d
{'a': [1, 27], 'b': [2, 28], ...}
为了完整性,由于没有人给出保留键值角色的答案,我给出了一个这样做的例子。在
同一个键不可能有多个值,但是,可以使用一个iterable值作为值,该值可用于模拟每个键的多个值:
这里我使用的是字典理解法,因为它更易于阅读-如果您使用的是非常旧的Python版本,则可能需要使用:
^{pr2}$字典不能有指向不同值的重复键,因此
d = {'a': 1, 'a': 27}
将不起作用。但是你可以反过来,这样键就是你的号码。。。类似这样的方法会起作用:结果:
^{pr2}$你真的不想这么做!字典不能有重复的键,这使得这实际上是不可能的。在
相反,您应该编写一个执行查找的函数,并使用模运算符
^{pr2}$%
来“包装”范围。在然后,不要做
d[27]
并得到'a'
,而是做char_lookup(27)
。在正如Lattyware在评论中指出的那样,您可能试图获得给定字符的一系列值,而不是给定一系列值的字符。在这种情况下,您可以做如下操作:
d
然后看起来像:相关问题 更多 >
编程相关推荐