python 排序方法中的键如何使用列表

Ala*_*lan 2 python sorting python-3.x

我对 Python 有点陌生。我看到了以下代码,但不明白如何使用“列表”对字符串进行排序。

    lookup = defaultdict(list)
    ## Filling the lookup
    #  .....
    #  .....
    inputs = ['abc', 'acb', 'acb'] # a list of strings
    result = ''.join(sorted(inputs[0], key=lookup.get))
Run Code Online (Sandbox Code Playgroud)

我不明白的是最后一行是关键部分。我知道它根据列表中的值进行字典排序。如果有人可以解释它或将此步骤分解为更具可读性的解决方案,我将不胜感激。

例如,如果查找表如下所示:

   {'a' : [-3, 0, 0], 'b': [0, -1, -2], 'c': [0, -2, -1]}
Run Code Online (Sandbox Code Playgroud)

那么结果将是这个 acb

Joh*_*nck 7

所述key给参数sorted的意思是“假装的值是该函数的而不是实际的值的结果。” 因此,当您'abc'使用您提供的查找表进行排序时,它会执行以下操作:

                # [1st, 2nd, 3rd] sort order
lookup.get('a') # [ -3,   0,   0]
lookup.get('b') # [  0,  -1,  -2]
lookup.get('c') # [  0,  -2,  -1]
Run Code Online (Sandbox Code Playgroud)

然后它将计算出上述值的排序顺序。列表按字典顺序排序意味着首先比较第一个元素,就像在字典中一样(“aardvark”在“beaver”之前,也在“ant”之前)。

查看第一个元素 (-3, 0, 0) 后,我们知道 'a' 的值最小,但我们不知道 'b' 和 'c' 中的哪个更小。但是一旦我们看到第二个元素 (0, -1, -2),我们就知道 'c' 更小,所以最终顺序是 'acb',而无需咨询第三个元素 (0, -2, -1 )。