在列表中将值从最高到最低排序

时间:2016-02-02 19:33:54

标签: python list sorting

的Python 目前我的代码打印了这个

Jem - 8
Rob - 9
Liah - 9
Zambia - 3

(姓名和得分) 但是我如何才能将这个订单从最高到最低?我研究并阅读了一些有关Lambda的内容,但我不太清楚它是如何工作的? 我有很多代码,这里是排序行

for name in name_scores: #16
      print(name, '-', max(name_scores[name]))#17 

它打印出最高分,我现在想要排序。

2 个答案:

答案 0 :(得分:1)

我假设您的name_scores是一个字母,其中键是名称,值是所有分数的列表。

考虑到这一点,你可以像这样迭代排序的dict:

for name in sorted(name_scores, key=lambda x: max(name_scores[x]), reverse=True):
    print(name, '-', max(name_scores[name]))

sorted()接受一个参数key,它允许您指定对象的排序方式。如果您没有为dict指定key,那么排序将适用于键(这对我们没有帮助)。

因此我们可以使用key告诉我们要排序的内容。这里需要一点点魔法以lambda的形式出现。

sorted()遍历你的dict并逐个调用lambda来获取一个值。 lambda的第一个参数(x)是自动提供的,并且是在调用lambda时对名称的引用。所以第一次通过它看起来像这样:

lambda x='Jem': max(name_scores[x])

对于dict中的每个名称重复此操作,然后将检索到的值用于排序。

答案 1 :(得分:0)

如果name_scores是一个dict,其名称为键,分数列表为值,如:

name_scores = {'Jem':[8,4,5],'Rob':[9,1,5], 'Liah':[9], 'Zambia':[3]}

然后,您可以通过执行以下操作获得所需的输出:

for name, scores in sorted(name_scores.items(),key=lambda x: max(x[1]), reverse=True):
    print(name,'-',max(scores))

工作原理:

name_scores.items()生成一个(名称,分数)元组列表。

lambda用于定义一个函数,该函数返回每个元组的最大分数。

对带有键选项的序列进行排序会将序列中的每个项目传递给函数,并按函数返回的值排序。在这种情况下,我们使用lambda函数作为键进行排序。

如果您在理解lambda函数的使用方面遇到困难,那么在没有lambda函数的情况下考虑以下等效代码通常会有所帮助:

def max_score(x):
    return max(x[1])

name_scores = {'Jem':[8,4,5],'Rob':[9,1,5], 'Liah':[9], 'Zambia':[3]}
for name, scores in sorted(name_scores.items(), key=max_score, reverse=True):
    print(name,'-',max(scores))