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)

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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python2中,字典(dict)是一个无序的容器类型,它存储的是键值对(key-value)的数据。如果要按照自定义顺序对字典进行排序,需要进行以下步骤: 1. 创建一个带有自定义顺序的列表(List),用于指定键(key)的排序顺序。 2. 使用sorted()函数对字典的键进行排序,在排序的过程中,使用自定义顺序列表作为key参数的排序规则。 3. 创建一个新的有序字典(OrderedDict)。 4. 遍历排序后的键列表,从原始字典中取出对应的值,并将键值对逐个添加到有序字典中。 下面是一个简单的示例代码: ```python # 导入OrderedDict模块 from collections import OrderedDict # 定义自定义顺序列表 order = ["key3", "key1", "key2"] # 原始字典 my_dict = {"key1": "value1", "key2": "value2", "key3": "value3"} # 对原始字典的键按照自定义顺序进行排序 sorted_keys = sorted(my_dict.keys(), key=lambda x: order.index(x)) # 创建一个新的有序字典 sorted_dict = OrderedDict() # 遍历排序后的键列表,从原始字典中取出对应的值,并将键值对添加到有序字典中 for key in sorted_keys: sorted_dict[key] = my_dict[key] # 打印有序字典 print(sorted_dict) ``` 运行以上代码,将按照自定义顺序对字典进行排序并打印结果。 注意:以上示例代码使用了collections模块中的OrderedDict类,因为Python2的普通字典是无序的,无法保证键的顺序。OrderedDict类是一个有序字典,可以按照添加顺序保持键的顺序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值