加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何使用Python dict获得班上排名前10位的学生

发布时间:2020-12-20 12:37:45 所属栏目:Python 来源:网络整理
导读:我有一个带有学生姓名和标记的字典 dict1 = {'name1': 34,'name2':45,'name3': 98,'name4':34,'name5': 66} 我希望获得前10名学生的名字以及上述词汇中的分数. 结果: name3 98name5 66name2 45name1 34name4 34 如果多个键具有相同的值,则键必须按字母顺序
我有一个带有学生姓名和标记的字典

dict1 = {'name1': 34,'name2':45,'name3': 98,'name4':34,'name5': 66}

我希望获得前10名学生的名字以及上述词汇中的分数.

结果:

name3 98
name5 66
name2 45
name1 34
name4 34

如果多个键具有相同的值,则键必须按字母顺序排列(例如:name1和name4按字母顺序排列,相同值为34)

如何完成它?

解决方法

天真的解决方案

你可以用普通的python写这个:

>>> names = {'name1': 34,'name5': 66}
>>> sorted_names = sorted(names.iteritems(),key=lambda (k,v): (-v,k))[:10]
>>> sorted_names
[('name3',98),('name5',66),('name2',45),('name1',34),('name4',34)]

sorted作为比较用于排序的关键

然后根据需要打印它们:

>>> for name,score in sorted_names:
...     print name,score
...
name3 98
name5 66
name2 45
name1 34
name4 34

或者只是一次完成所有操作:

>>> for name,score in sorted(names.iteritems(),k))[:10]:
...     print name,score
...
name3 98
name5 66
name2 45
name1 34
name4 34

灵感来自@Martijn Pieters‘answer

使用heapq,特别是heapq.nsmallest,您可以拥有更优雅的解决方案:

>>> from heapq import nsmallest
>>> for name,score in nsmallest(10,names.iteritems(),k)):
...     print name,score
...
name3 98
name5 66
name2 45
name1 34
name4 34

我喜欢这个解决方案的是nsmallest可以智能地实现.它可能类似于懒惰的实现,就像在Lazy Evaluation and Time Complexity的答案中所描述的那样.所以,你只需要做最少量的工作.虽然天真的解决方案必须在获得前10个之前对整个迭代进行排序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读