利用python怎么实现一个字典排序功能-创新互联
本篇文章为大家展示了利用python怎么实现一个字典排序功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
成都创新互联-专业网站定制、快速模板网站建设、高性价比柳河网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式柳河网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖柳河地区。费用合理售后完善,10余年实体公司更值得信赖。我们用一个例子来演示一下字典排序:roster是一个保存学生信息的字典,请按照女生优先、低年级在前、总成绩从高到底排序;如果总成绩相同,则顺序比较语文、数学、英语成绩,高者在前。
roster = { '李妍可': {'性别':'女', '年级':3, '语文':98, '数学':95, '英语':100}, '邬胜杰': {'性别':'男', '年级':5, '语文':95, '数学':100, '英语':97}, '白星瑶': {'性别':'女', '年级':2, '语文':100, '数学':99, '英语':100}, '吴诗涵': {'性别':'男', '年级':3, '语文':98, '数学':92, '英语':90}, '庄嘉顺': {'性别':'男', '年级':5, '语文':97, '数学':95, '英语':100} }
Python最常用的排序函数是sorted(),我们就用sorted()来实现这个排序。如果一次写出复合排序条件,有一定难度。我们化繁为简,一步步实现。
1. 比较总成绩
>>> sorted(roster, key=lambda name:roster[name]['语文']+roster[name]['数学']+roster[name]['英语']) ['吴诗涵', '邬胜杰', '庄嘉顺', '李妍可', '白星瑶']
看起来没有问题,但sorted默认是升序,总成绩从高到底排序的话,要使用reverse=True这个参数。
>>> sorted(roster, key=lambda name:roster[name]['语文']+roster[name]['数学']+roster[name]['英语'], reverse=True) ['白星瑶', '李妍可', '邬胜杰', '庄嘉顺', '吴诗涵']
2. 再来尝试女生优先、低年级在前的两个条件排序
只要在lambda函数中,把排序项并列写出来,sorted()就会自动实现符合条件排序。这里性别排序的条件是'性别'==‘男',对女生而言,结果是False(0),小于男生的True(1),自然就排在了前面。
>>> sorted(roster, key=lambda name:(roster[name]['性别']=='男',roster[name]['年级'])) ['白星瑶', '李妍可', '吴诗涵', '邬胜杰', '庄嘉顺']
3. 最终实现
尝试了单个条件和两个条件的排序之后,实现本题目的最终要求就很容易了。不过,成绩降序排列的话,不能直接使用reverse=True,因为会影响性别和年级的排序。我们可以稍微变通一下,达到最终的目的。
>>> sorted(roster, key=lambda name:( roster[name]['性别']=='男', roster[name]['年级'], 300-roster[name]['语文']-roster[name]['数学']-roster[name]['英语'], 100-roster[name]['语文'], 100-roster[name]['数学'], 100-roster[name]['英语'] )) ['白星瑶', '李妍可', '吴诗涵', '庄嘉顺', '邬胜杰']
上述内容就是利用python怎么实现一个字典排序功能,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。
网站栏目:利用python怎么实现一个字典排序功能-创新互联
文章位置:http://cdiso.cn/article/coeedg.html