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

Python 写这个表达式的有效方法:英语字母词典,python,Python,实现此表达式的有效且正确的方法是什么 {'a': 1, 'b': 2 ... 'z': 26} 我试过: x = dict(zip(chr(range(ASCII of A, ASCII of Z))) 像这样的?但是我想不出正确的表达方式。我想我没有仔细回答这个问题。固定的 dict( (chr(x), x-ord('a') +1 ) for x in range(ord('a'), ord('z')+1)) 我想我没有仔细回答这个问题。固定的 dict( (chr(x), x-ord(

实现此表达式的有效且正确的方法是什么

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

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

像这样的?但是我想不出正确的表达方式。

我想我没有仔细回答这个问题。固定的

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

我想我没有仔细回答这个问题。固定的

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

您的思路是正确的,但是请注意,
zip
需要一个序列

这就是你需要的:

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

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

您的思路正确,但请注意,
zip
需要一个序列

>>> 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}
这就是你需要的:

alphabets = dict(zip([chr(x) for x in range(ord('a'), ord('z')+1)], range(1, 27)))
ord
返回一个字符串的整数序号。因此,您不能执行
chr(序列)
ord(序列)
。它必须是单个字符或单个数字

>>> 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}
枚举(小写)
返回此序列
(0,'a'),(1,'b'),(2,'c'),…

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

enumerate(小写,1)
返回此序列
(1,'a'),(2,'b'),(3,'c'),…

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

>>> dict((j,i+1) for i,j in enumerate(lowercase)) 
枚举(小写)
返回此序列
(0,'a'),(1,'b'),(2,'c'),…

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

enumerate(小写,1)
返回此序列
(1,'a'),(2,'b'),(3,'c'),…

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

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

我不确定具体的实现方式,但使用ASCII码对您有利吗?因为它们是有序的?指定开始和结束,然后循环添加ASCII字符和ASCII代码减去起始点。

我不确定是否有确切的实现,但使用ASCII代码对您有利,因为它们是有序的吗?指定开始和结束,然后循环添加ASCII字符和ASCII代码减去起始点。

字典理解:

 dict((chr(x + 96), x) for x in range(1, 27))
{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词典理解:

{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是你真正想要的字典查找吗? 您可以使用一个函数来执行以下操作:

def getNum(ch):
    return ord(ch) - ord('a') + 1
这是一个非常简单的数学运算,因此它可能比字典查找更有效,因为不需要对字符串进行散列和比较

要进行字典查找,需要对要查找的键进行散列,然后需要找到该散列在字典中的位置。接下来,它必须将该键与找到的键进行比较,以确定它是相同的还是哈希冲突。然后,它必须读取该位置的值

该函数只需要做一些附加操作。不过,它确实有函数调用的开销,因此可能比字典查找效率低

你可能需要考虑的是,如果输入无效(不是‘A’-Z’,例如“A’”),每个解决方案都会做什么。字典解决方案将引发一个键错误。如果使用函数,可以添加代码以捕获错误。如果将“A”与就地解决方案一起使用,则会得到错误的结果,但不会出现错误,表明输入无效


问题是,除了问“实现此表达式的有效方法是什么?”之外,您还应该问(至少问问自己)“此表达式真的是我想要的吗?”以及“效率越高是否值得权衡?”

查字典真的是你想要的吗? 您可以使用一个函数来执行以下操作:

def getNum(ch):
    return ord(ch) - ord('a') + 1
这是一个非常简单的数学运算,因此它可能比字典查找更有效,因为不需要对字符串进行散列和比较

要进行字典查找,需要对要查找的键进行散列,然后需要找到该散列在字典中的位置。接下来,它必须将该键与找到的键进行比较,以确定它是相同的还是哈希冲突。然后,它必须读取该位置的值

该函数只需要做一些附加操作。不过,它确实有函数调用的开销,因此可能比字典查找效率低

你可能需要考虑的是,如果输入无效(不是‘A’-Z’,例如“A’”),每个解决方案都会做什么。字典解决方案将引发一个键错误。如果使用函数,可以添加代码以捕获错误。如果将“A”与就地解决方案一起使用,则会得到错误的结果,但不会出现错误,表明输入无效


问题是,除了问“实现此表达式的有效方法是什么?”之外,您还应该问(至少问问自己)“此表达式真的是我想要的吗?”以及“效率越高是否值得权衡?”

这将返回ASCII码,而不是请求的字典。输出为:
{'a':97,'c':99,'b':98,
enumerate将因子出丑陋的
-ord('a')+1
这将返回ASCII码,而不是请求的字典。输出为:
{'a':97,'c':99,'b':98,
enumerate将因子出丑陋的
-ord('a')+1(小写)--尽管
,1
支持需要2.6回答“请解释枚举”应包括+1回答枚举(小写)--尽管
,1
支持需要2.6回答