Python:多条件排序和字典排序

简介:列表的sort()方法和内置函数sorted()均支持可以参数实现复杂排序要求。

条件格式:sort(key=ambda x:(x[0],-x[1],……,+x[n]))

参数说明默认:+升序,可不填,-负号代表降序。

案例解析:

1、第一条件升序,在第一条件均相同下按第二条件升序。

2、第一条件升序,在第一条件均相同下按第二条件降序。

3、多条件组合升序或者降序。条件格式:lambda x:(x[0],x[1],……,x[n])

4、处理字典类型key-value双条件升序、降序。

5、字典key-value:key升序

6、字典key-value:value升序

案例源码:

# -*- coding: utf-8 -*-
# time: 2022/5/21 11:28
# file: multi_sort.py
# 公众号: 玩转测试开发

# 1、第一条件升序,在第一条件均相同下按第二条件升序。
lst1 = [(3, 3), (3, 2), (1, 1), (1, 2), (2, 1)]
lst1.sort(key=lambda x: (x[0], x[1]))
print(lst1)  # [(1, 1), (1, 2), (2, 1), (3, 2), (3, 3)]

# 2、第一条件升序,在第一条件均相同下按第二条件降序。
lst2 = [(3, 3), (3, 2), (1, 1), (1, 2), (2, 1)]
lst2.sort(key=lambda x: (x[0], -x[1]))
print(lst2)  # [(1, 2), (1, 1), (2, 1), (3, 3), (3, 2)]

# 3、多条件组合升序或者降序。
lst3 = [(3, 3, 1), (3, 3, 2), (3, 3, 3), (1, 1, 1), (1, 1, 2), (1, 2, 3), (1, 3, 2)]
lst3.sort(key=lambda x: (x[0], x[1], x[2]))
print(lst3)  # [(1, 1, 1), (1, 1, 2), (1, 2, 3), (1, 3, 2), (3, 3, 1), (3, 3, 2), (3, 3, 3)]

# 4、处理列表嵌套字典,key-value双条件升序、降序。
person1 = [
    {'name': 'Tom', 'age': 28, 'weight': 50.23},
    {'name': 'Cat', 'age': 30, 'weight': 56.45},
    {'name': 'Cat', 'age': 30, 'weight': 45.04},
    {'name': 'Tom', 'age': 28, 'weight': 60.88}
]

# name升序 > age升序 > weight升序
person1.sort(key=lambda person: (person['name'], person['age'], person['weight']))
print(person1)
# [{'name': 'Cat', 'age': 30, 'weight': 45.04}, {'name': 'Cat', 'age': 30, 'weight': 56.45},
#  {'name': 'Tom', 'age': 28, 'weight': 50.23}, {'name': 'Tom', 'age': 28, 'weight': 60.88}]


person2 = [
    {'name': 'Tom', 'age': 28, 'weight': 50.23},
    {'name': 'Cat', 'age': 32, 'weight': 56.45},
    {'name': 'Cat', 'age': 30, 'weight': 45.04},
    {'name': 'Tom', 'age': 26, 'weight': 60.88}
]
person2.sort(key=lambda person: (person['name'], -person['age'], person['weight']))
print(person2)  # name升序 > age降序 > weight升序
# [{'name': 'Cat', 'age': 32, 'weight': 56.45}, {'name': 'Cat', 'age': 30, 'weight': 45.04},
#  {'name': 'Tom', 'age': 28, 'weight': 50.23}, {'name': 'Tom', 'age': 26, 'weight': 60.88}]

# 5、字典key-value:key升序
dic5 = {'a': 15, 'e': 13, 'd': 45, 'b': 10}
dic5 = sorted(dic5.items(), key=lambda dic: dic[0])
print(dic5)

# 6、字典key-value:value升序
dic6 = {'a': 15, 'e': 13, 'd': 45, 'b': 10}
dic6 = sorted(dic6.items(), key=lambda dic: dic[1])
print(dic6)

微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!

你可能感兴趣的:(排序算法,算法)