Python中如何基于对象属性对对象列表进行排序?
问题原因
- 你通过
input()获取的score是字符串类型,排序时会按照字符串的字典序比对(例如字符串"1000"的首字符是'1',比"200"的首字符'2'小,所以排序时1000会排在200前面),不是按数值大小排序 sorted()默认是升序排列,你需要的降序效果要额外加reverse=True参数
修改方法
- 把读取分数的代码改成转成整数类型:
score = int(input("Input score : "))
- 排序时指定降序:
nl = sorted(list_player, key=lambda player: player.score, reverse=True)
补充说明
如果需要实现类似Java自定义Comparator的复杂排序逻辑,可以导入functools.cmp_to_key自定义比较函数,你的当前场景用key参数已经足够高效简洁。
内容的提问来源于stack exchange,提问作者mc20
相关产品推荐
相关产品推荐

