本篇文章为大家展示了利用python怎么实现一个字典排序功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
我们用一个例子来演示一下字典排序: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()来实现这个排序。如果一次写出复合排序条件,有一定难度。我们化繁为简,一步步实现。
>>> 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) ['白星瑶', '李妍可', '邬胜杰', '庄嘉顺', '吴诗涵']
只要在lambda函数中,把排序项并列写出来,sorted()就会自动实现符合条件排序。这里性别排序的条件是'性别'==‘男',对女生而言,结果是False(0),小于男生的True(1),自然就排在了前面。
>>> sorted(roster, key=lambda name:(roster[name]['性别']=='男',roster[name]['年级'])) ['白星瑶', '李妍可', '吴诗涵', '邬胜杰', '庄嘉顺']
尝试了单个条件和两个条件的排序之后,实现本题目的最终要求就很容易了。不过,成绩降序排列的话,不能直接使用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怎么实现一个字典排序功能,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。