Python3使用sort函数自定义排序

直接使用sort()函数

score = [78, 90, 40, 60]
score.sort()
print(score)

### [40, 60, 78, 90]

根据数据中的某一个项排序

students = [{"age": 18, "name": 'jack', "score": 89},
            {"age": 15, "name": 'tom', "score": 98},
            {"age": 16, "name": 'mike', "score": 98},
            {"age": 19, "name": 'jone', "score": 95}]

students.sort(key=lambda student: student['score'])
print(students)

### [{'age': 18, 'name': 'jack', 'score': 89},
###  {'age': 19, 'name': 'jone', 'score': 95},
###  {'age': 15, 'name': 'tom', 'score': 98},
###  {'age': 16, 'name': 'mike', 'score': 98}]

使用自定义的比较函数

在Python2.x中,可以使用cmp函数

students = [{"age": 18, "name": 'jack', "score": 89},
            {"age": 15, "name": 'tom', "score": 98},
            {"age": 16, "name": 'mike', "score": 98},
            {"age": 19, "name": 'jone', "score": 95}]

def compare(a, b):
    if a["score"] > b["score"]:
        return 1
    elif a["score"] < b["score"]:
        return -1
    else:
        return 0
students.sort(cmp=compare)
print(students)

### [{'age': 18, 'name': 'jack', 'score': 89},
###  {'age': 19, 'name': 'jone', 'score': 95},
###  {'age': 15, 'name': 'tom', 'score': 98},
###  {'age': 16, 'name': 'mike', 'score': 98}]

在python3.x中,移除了cmp函数,如果需要自定义比较,需要借用functools模块来完成

import functools

students = [{"age": 18, "name": 'jack', "score": 89},
            {"age": 15, "name": 'tom', "score": 98},
            {"age": 16, "name": 'mike', "score": 98},
            {"age": 19, "name": 'jone', "score": 95}]

def compare(a, b):
    if a["score"] > b["score"]:
        return 1
    elif a["score"] < b["score"]:
        return -1
    else:
        return 0
students.sort(key=functools.cmp_to_key(compare))
print(students)

### [{'age': 18, 'name': 'jack', 'score': 89},
###  {'age': 19, 'name': 'jone', 'score': 95},
###  {'age': 15, 'name': 'tom', 'score': 98},
###  {'age': 16, 'name': 'mike', 'score': 98}]
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值