【发布时间】:2015-11-21 04:13:27
【问题描述】:
说我有
votes = {'Charlie': 20, 'Able': 10, 'Baker': 20, 'Dog': 15}
我明白了
print(sorted(votes.items(), key=lambda x: x[1]))
会导致
[('Able', 10), ('Dog', 15), ('Baker', 20), ('Charlie', 20)]
但是这是如何工作的呢?
【问题讨论】:
-
我明白了,谢谢,那么如果我更改密钥以返回一个元组呢?那里发生了什么?
key = lambda x: (-x[1],x[0]) -
这将按元组
(-value, key)排序。它最终会按值从大到小排序,并打破与键的联系。结果将是[('Baker', 20), ('Charlie', 20), ('Dog', 15), ('Able', 10)]。 -
哦,好吧,如果排序忽略了
x[0]在元组中的关键方面的目的是什么?我想我的意思是,我为什么要在 lambda 中返回一个元组? -
x[0]不会被忽略;它用于与元组中的第一项断开联系。这就是为什么('Baker', 20)总是出现在('Charlie', 20)之前的原因 -
在对元组进行排序时,Python首先按第一个值排序。然后,如果有任何关系(即两个或多个元组具有相同的第一个值),它按第二个值排序,如果第二个值有任何关系,则按第三个值排序,等等。把它想象成按字母顺序排序单词命令。首先你按第一个字母排序;如果有任何关系,则按第二个字母排序;你继续前进,直到没有更多的联系,或者你的信件用完了。
标签: python sorting dictionary