代码之家  ›  专栏  ›  技术社区  ›  user225312

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

  •  1
  • user225312  · 技术社区  · 15 年前

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

    我试过:

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

    7 回复  |  直到 15 年前
        1
  •  7
  •   John La Rooy    15 年前
    >>> 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)) 
    
        2
  •  1
  •   fmark    15 年前
     dict((chr(x + 96), x) for x in range(1, 27))
    
        3
  •  0
  •   user225312    15 年前

    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
  •   Jookia    15 年前

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

        5
  •  0
  •   momo    15 年前

    {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
  •   SingleNegationElimination    15 年前

    我想我对这个问题的回答不够仔细。固定的

    dict( (chr(x), x-ord('a') +1 ) for x in range(ord('a'), ord('z')+1))
    
        7
  •  0
  •   Tolli    11 年前

    查字典真的是你想要的吗? 你可以有一个函数来实现这一点:

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

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

    这个函数只需要做几个加法。不过,它确实有函数调用的开销,因此可能比字典查找效率低。

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