的Python 目前我的代码打印了这个
Jem - 8
Rob - 9
Liah - 9
Zambia - 3
(姓名和得分) 但是我如何才能将这个订单从最高到最低?我研究并阅读了一些有关Lambda的内容,但我不太清楚它是如何工作的? 我有很多代码,这里是排序行
for name in name_scores: #16
print(name, '-', max(name_scores[name]))#17
它打印出最高分,我现在想要排序。
答案 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))