Python按照先后顺序,对列表进行多条件自定义排序

需求:
对指定的无序列表,按照以下顺序排序:
①先按照【编号】从小到大进行排序
②再按照列表中包含【方案、扩初、施工图、后期服务】的顺序进行排序

实现:
自定义排序函数reversed_cmp,并将这个函数传入sort或sorted方法中。在python3中,借助functools包来完成。

import  functools

arr = [
    '2020-1001_有方案',
    '2020-1001_无后期服务',
    '2020-1002_有后期服务',
    '2019-1001_无施工图',
    '2020-1001_有扩初',
    '2020-1001_无施工图',
    '2019-1001_有方案',
    '2020-1002_有方案',
    '2020-1002_有扩初',
    '2019-1001_有扩初',
    '2020-1002_有施工图',
    '2019-1001_无后期服务'
]

def reversed_cmp(x, y):
    bh1 = x[0:9]
    bh2 = y[0:9]
    arr = ['方案','扩初','施工图','后期服务']
    if bh1 > bh2:
        return 1
    elif bh1 == bh2:
        if arr.index(x[11:len(x)]) > arr.index(y[11:len(y)]):
            return 1
        else:return -1
    else:
        return -1

result = sorted(arr,key=functools.cmp_to_key(reversed_cmp))

for x in result:
    print(x)

输出结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值