说我有
../
我理解
votes = {'Charlie': 20, 'Able': 10, 'Baker': 20, 'Dog': 15}
将导致
[(' Able',10),(' Dog',15),(' Baker',20),(' Charlie&# 39;,20)]`
但这是如何运作的?
答案 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']