写这个表达式的有效方法:英文字母词典

时间:2010-11-06 06:29:05

标签: python

实现此表达式的有效方法是什么?

{'a': 1, 'b': 2 ... 'z': 26}

我试过了:

x = dict(zip(chr(range(ASCII of A, ASCII of Z)))

这样的东西?但我无法弄清楚正确的表达方式。

7 个答案:

答案 0 :(得分:7)

>>> from string import lowercase
>>> dict((j,i) for i,j in enumerate(lowercase, 1)) 
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12, 'o': 15, 'n': 14, 'q': 17, 'p': 16, 's': 19, 'r': 18, 'u': 21, 't': 20, 'w': 23, 'v': 22, 'y': 25, 'x': 24, 'z': 26}

enumerate(lowercase)返回此序列(0, 'a'), (1, 'b'), (2, 'c'),...

通过添加可选参数,枚举从1开始而不是0

enumerate(lowercase, 1)返回此序列(1, 'a'), (2, 'b'), (3, 'c'),...

早于2.6的python不支持可选参数,因此您可以用这种方式编写

>>> dict((j,i+1) for i,j in enumerate(lowercase)) 

答案 1 :(得分:1)

 dict((chr(x + 96), x) for x in range(1, 27))

答案 2 :(得分:0)

猜猜我没有仔细地回答这个问题。固定

dict( (chr(x), x-ord('a') +1 ) for x in range(ord('a'), ord('z')+1))

答案 3 :(得分:0)

您走在正确的轨道上,但请注意zip需要序列。

所以这就是你所需要的:

alphabets = dict(zip([chr(x) for x in range(ord('a'), ord('z')+1)], range(1, 27)))

ord返回一个字符串的整数序数。因此,您无法执行chr(sequence)ord(sequence)。它必须是单个字符或单个数字。

答案 4 :(得分:0)

我不确定一个确切的实现,但是因为它们是有序的,使用ASCII代码是不是有意义?指定开始和结束然后通过它们循环添加ASCII字符和ASCII代码减去起点。

答案 5 :(得分:0)

字典理解:

{chr(a + 96):a for a in range(1,27)}

>>> {chr(a + 96):a for a in range(1,27)}
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12, 'o': 15, 'n': 14, 'q': 17, 'p': 16, 's': 19, 'r': 18, 'u': 21, 't': 20, 'w': 23, 'v': 22, 'y': 25, 'x': 24, 'z': 26}

这仅适用于支持字典理解的python版本,例如: 3.x和我认为2.7

答案 6 :(得分:0)

字典查找真的是你想要的吗? 你可以有一个功能:

def getNum(ch):
    return ord(ch) - ord('a') + 1

这是非常简单的数学,因此它可能比字典查找更有效,因为字符串不需要进行散列和比较。

要进行字典查找,需要对要查找的密钥进行哈希处理,然后需要查找字典中哈希的位置。接下来,它必须将密钥与它找到的密钥进行比较,以确定它是否相同或是否是哈希冲突。然后,它必须读取该位置的值。

该功能只需要做一些补充。它确实具有函数调用的开销,因此可能使其效率低于字典查找。

您可能需要考虑的另一件事是,如果输入无效,则每个解决方案都会起作用(不是'a' - 'z',例如大写'A')。字典解决方案会引发KeyError。如果使用了函数,可以添加代码来捕获错误。如果您在就地解决方案中使用“A”,则会得到错误的结果,但不会出现错误,表明您输入的内容无效。

关键在于,除了询问“实现这个表达式的有效方法是什么?”之外,你还应该问(至少问问自己)“这个表达式真的是我想要的吗?”并且“效率越高是否值得权衡利弊?”