python排序函数中的关键参数如何工作?

时间:2015-08-26 23:16:07

标签: python sorting dictionary

说我有

../

我理解

votes = {'Charlie': 20, 'Able': 10, 'Baker': 20, 'Dog': 15}

将导致

  

[(' Able',10),(' Dog',15),(' Baker',20),(' Charlie&# 39;,20)]`

但这是如何运作的?

4 个答案:

答案 0 :(得分:5)

传递给key的函数被赋予每个正在排序的项目,并返回Python可以排序的“密钥”。因此,如果您想通过字符串的 reverse 对字符串列表进行排序,您可以这样做:

list_of_strings.sort(key=lambda s: s[::-1])

这使您可以指定每个项目的排序值,而无需更改项目。这样,您就不必构建反向字符串列表,对其进行排序,然后将其反转。

# DON'T do this

data = ['abc', 'def', 'ghi', 'jkl']
reversed_data = [s[::-1] for s in data]
reversed_data.sort()
data = [s[::-1] for s in reversed_data]

# Do this

data.sort(key=lambda s: s[::-1])

在您的情况下,代码通过元组中的 second 项对每个项进行排序,而通常它最初将按元组中的第一项排序,然后断开与第二项的关联。

答案 1 :(得分:3)

key是一个函数,在比较它们之前,它将被调用以转换集合的项目。传递给key的参数必须是可调用的。

lambda的使用创建了一个匿名函数(可以调用)。在排序的情况下,callable只接受一个参数。 Python的lambda非常简单。它只能做和返回一件事。

答案 2 :(得分:0)

>>> votes = {'Charlie': 20, 'Able': 10, 'Baker': 20, 'Dog': 15}
on above dictionary if we apply items() function it will give the below result. 
>>> votes.items()
[('Charlie', 20), ('Baker', 20), ('Able', 10), ('Dog', 15)]

以下命令会像这样破坏 print(sorted(votes.items(),key = lambda x:x [1]))

比较每个数组的第二个元素(在这种情况下x [0] = Chalie和x [1] = 20)

并且每个元素将与x [1]而不是x [0]进行比较,结果将被重新排列。 步骤1 => X [0] ='查理'x [1] = 20,X [0] ='贝克'x [1] = 20,X [0] ='能'x [1] = 10,X [0] =狗'x [1] = 15,

步骤2 => [(X [0] ='Able'x [1] = 10),(X [0] = Dog'x [1] = 15),(X [0] ='Baker'x [1] = 20) ,(X [0] ='查理'x [1] = 20)]

步骤3 => [('Able',10),('Dog',15),('Baker',20),('Charlie',20)]

我希望这会让人们更容易理解。

答案 3 :(得分:0)

key参数将一个函数作为其值,在排序之前将其应用于每个元素,以便根据此函数的输出对元素进行排序。

例如,如果您要根据字符串的长度对列表进行排序,则可以执行以下操作:

    list = ['aaaaaa', 'bb', 'ccc', 'd']
    sorted(list, key=len)

    # ['d', 'bb', 'ccc', 'aaaaaa']