如何按JoiningDate(非0时)或uid对Python字典列表排序?
修正字典列表的排序代码
先帮你梳理下原代码的问题:
- 你误把原列表名写成了
set_of_students,实际应该是定义好的students sorted()的key参数不能用这种分支式的写法,得用一个统一的lambda表达式来返回排序依据的键值
正确实现代码
你需要让key对应的lambda函数根据JoiningDate是否为0返回不同的排序字段,这样就能满足需求了:
students = [{"name": "Student1", "JoiningDate": 2012, "uid": 5}, {"name": "Student2", "JoiningDate": 2008, "uid":10}, {"name": "Student3", "JoiningDate": 2017, "uid": 1}] sorted_students = sorted(students, key=lambda item: item['JoiningDate'] if item['JoiningDate'] != 0 else item['uid'])
代码逻辑解释
- 当字典中的
JoiningDate不为0时,lambda函数返回JoiningDate的值,排序就按这个日期升序排列 - 当
JoiningDate为0时,lambda函数返回uid的值,排序就按uid升序排列
测试结果
运行上面的代码后,sorted_students的结果会是:
[ {"name": "Student2", "JoiningDate": 2008, "uid": 10}, {"name": "Student1", "JoiningDate": 2012, "uid": 5}, {"name": "Student3", "JoiningDate": 2017, "uid": 1} ]
完全符合按JoiningDate排序的预期。如果之后遇到某个学生的JoiningDate为0,比如新增{"name": "Student4", "JoiningDate": 0, "uid": 3},排序时就会按uid来排列这个学生的位置。
内容的提问来源于stack exchange,提问作者Pradeep
相关产品推荐
相关产品推荐

