我希望制作一个字典,将字母表中的每个字母设置为其数字值,例如a:1就像这样。
alphabet = dict([ (chr(97+i), i+1) for i in range(0, 26) ])
然而,一旦它到达z我需要它再次循环,但值必须从26继续,例如z:26,a:27,b:28,依此类推。如果不手动编写字典,我将如何做到这一点?
答案 0 :(得分:2)
你真的不想这样做,你只是觉得你这样做!字典不能有重复键,这实际上是不可能的。
>>> d = {'a': 1, ..., 'a':27} # doesn't work the way you think it does!
>>> d
{'a': 27} # where'd the a->1 mapping go!
你应该做的是编写一个执行查找的函数,并使用模运算符%
来“包装”范围。
def char_lookup(ord_):
"""Maps 1->a, 2->b, etc. Handles 27->a, 28->b, ..."""
OFFSET = 97
return chr((ord_-1) % 26 + OFFSET)
然后执行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], ...}
答案 1 :(得分:1)
为了完整起见,由于没有人给出保留键值角色的答案,我举一个例子。
同一个键不可能有多个值,但是,您可以将值的可迭代值作为值,可用于模拟每个键的多个值:
>>> 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,你可能需要使用:
dict((chr(i + 97), itertools.count(i + 1, 26)) for i in range(0, 26))
答案 2 :(得分:0)
字典不能有指向不同值的重复键,因此d = {'a': 1, 'a': 27}
无法正常工作。然而,您可以反转,以便键是您的数字......这样的事情会起作用:
import string
d = {}
for i, l in enumerate(string.ascii_lowercase):
d[i+1] = l
d[i+27] = l
结果:
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', 7: 'g', 8: 'h', 9: 'i', 10: 'j', 11: 'k', 12: 'l', 13: 'm', 14: 'n', 15: 'o', 16: 'p', 17: 'q', 18: 'r', 19: 's', 20: 't', 21: 'u', 22: 'v', 23: 'w', 24: 'x', 25: 'y', 26: 'z', 27: 'a', 28: 'b', 29: 'c', 30: 'd', 31: 'e', 32: 'f', 33: 'g', 34: 'h', 35: 'i', 36: 'j', 37: 'k', 38: 'l', 39: 'm', 40: 'n', 41: 'o', 42: 'p', 43: 'q', 44: 'r', 45: 's', 46: 't', 47: 'u', 48: 'v', 49: 'w', 50: 'x', 51: 'y', 52: 'z'}
答案 3 :(得分:0)
如果你想要'循环'的东西,即你从传递26后再次开始(或25,如果你从0开始),那么你需要的不是字典而是函数(因为在评论中指出) ,python词典不能有重复的键)。所以尝试类似的事情:
def alphabet(i):
i = i%26
return chr(97+i)
你可以用这个简单的循环来测试它:
for i in range(200):
print(alphabet(i))
答案 4 :(得分:0)
这是实现所需目标的另一种方式:
a = 'abcdefghijklmnopqrstuvwxyz'
b = list(range(1,53))
c = [x for x in a*2]
d = dict(zip(b,c))
d
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', 7: 'g', 8: 'h', 9: 'i', 10: 'j', 11: 'k', 12: 'l', 13: 'm', 14: 'n', 15: 'o', 16: 'p', 17: 'q', 18: 'r', 19: 's', 20: 't', 21: 'u', 22: 'v', 23: 'w', 24: 'x', 25: 'y', 26: 'z', 27: 'a', 28: 'b', 29: 'c', 30: 'd', 31: 'e', 32: 'f', 33: 'g', 34: 'h', 35: 'i', 36: 'j', 37: 'k', 38: 'l', 39: 'm', 40: 'n', 41: 'o', 42: 'p', 43: 'q', 44: 'r', 45: 's', 46: 't', 47: 'u', 48: 'v', 49: 'w', 50: 'x', 51: 'y', 52: 'z'}