对列表中的值从高到低进行排序



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

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

(姓名和分数)但是我怎样才能从高到低地排序呢?我研究并阅读了一些关于 Lambda 的信息,但我不太确定它是如何工作的?我有很多代码,这里是排序行

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

它打印最高分,我现在想对其进行排序。

我假设你的name_scores是一个字典,键是名称,值是他们所有分数的列表。

考虑到这一点,您可以像这样迭代排序的字典:

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

sorted()采用参数key该参数允许您指定对象排序方式。 如果您没有为字典指定key,则排序将应用于键(这在这里对我们没有帮助)。

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

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

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

这将对字典中的每个名称重复,然后检索到的值用于排序。

如果name_scores是一个字典,名称作为键,分数列表作为值,例如:

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 用于定义一个函数,该函数返回每个元组的最大分数。

使用带有 key 选项的序列排序会将序列中的每个项目传递给函数,并按函数返回的值进行排序。在这种情况下,我们使用 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))

最新更新