用sort(),sorted()对列表的数据,字典和对象进行排序

在对列表进行操作时,往往会用到排序,同时由于列表中存储的数据类型繁多,在面临着不同的排序要求。现在我们总结一下用sort(),sorted()对列表的数据,字典和对象进行排序。由于排序可以分成正序和倒序,同时有可以改变原列表与否的区分,还有不同存储内容,因此组合颇多,我们一一介绍。

sort()的用法

sort()函数的定义是def sort(self, key=None, reverse=False)。用法是list.sort()`,它改变原来list的顺序。reverse参数表示倒序和正序排序。当为True时,为倒序排序,默认为正序排序。

sorted()的用法

sorted()函数的定义为def sorted(*args, **kwargs) ,一般用法是sorted(list,key=[], reverse=False).。它不改变原来list的顺序,需要有变量接收返回值。reverse参数表示倒序和正序排序。当为True时,为倒序排序,默认为正序排序。

一般数字列表排序

1. 正序递增排序,改变原来列表

list_test=[3,2,4,5,6,7,34]
list_test.sort()
print(list_test)

结果为:

[2, 3, 4, 5, 6, 7, 34]

2. 倒序递减排序,改变原来列表

list_test=[3,2,4,5,6,7,34]
list_test.sort(reverse=True)
print(list_test)

结果为

[34, 7, 6, 5, 4, 3, 2]

3. 正序递增排序,不改变原来列表

list_test=[3,2,4,5,6,7,34]
list_v=sorted(list_test)
print(list_test)
print(list_v)
print('-----------')

结果为

[3, 2, 4, 5, 6, 7, 34]
[2, 3, 4, 5, 6, 7, 34]
-----------

4. 倒序递减排序,不改变原来列表

list_test=[3,2,4,5,6,7,34]
list_v=sorted(list_test,reverse=True)
print(list_test)
print(list_v)

结果为

[3, 2, 4, 5, 6, 7, 34]
[34, 7, 6, 5, 4, 3, 2]

包含字典的列表排序

当列表里的数据是字典时,需要根据字典的k-v中的一个进行排序时,需要用到lamda表达方式,从字典的k-v中获取排序的依据。

1. 不改变原来列表的排序

list1 = [{'name': 'Kevin', 'age': 27}, {'name': 'Ling', 'age': 23},{'name': 'Liu', 'age': 24}]
# 升序
list2 = sorted(list1, key=lambda list1: list1["age"])
print("开始列表:{}".format(list1))
print("升序后列表:{}".format(list2))

# 降序
list2 = sorted(list1, key=lambda list1: list1.get("age"), reverse=True)
print("开始列表:{}".format(list1))
print("降序后列表:{}".format(list2))

其中,key=lambda list1: list1.get("age")key=lambda list1: list1["age"] 都是从字典元素list1里获取排布依据。结果为

开始列表:[{'age': 27, 'name': 'Kevin'}, {'age': 23, 'name': 'Ling'}, {'age': 24, 'name': 'Liu'}]
升序后列表:[{'age': 23, 'name': 'Ling'}, {'age': 24, 'name': 'Liu'}, {'age': 27, 'name': 'Kevin'}]
开始列表:[{'age': 27, 'name': 'Kevin'}, {'age': 23, 'name': 'Ling'}, {'age': 24, 'name': 'Liu'}]
降序后列表:[{'age': 27, 'name': 'Kevin'}, {'age': 24, 'name': 'Liu'}, {'age': 23, 'name': 'Ling'}]

2. 改变原来列表的排序

list1 = [{'name': 'Kevin', 'age': 27}, {'name': 'Ling', 'age': 23},{'name': 'Liu', 'age': 24}]

list1.sort(key=lambda list1: list1["age"])
print("列表:{}".format(list1))

结果为如下。如果要降序,则添加reverse=True

列表:[{'age': 23, 'name': 'Ling'}, {'age': 24, 'name': 'Liu'}, {'age': 27, 'name': 'Kevin'}]

包含对象的列表排序

当列表里的数据是对象的时候,排序方法与前面含字典的列表排序类似,使用lambda方法,把对象的某个属性作为排序依据。

1. 包含对象的列表排序

下面用构建一个包含对象的列表,然后进行排序

class Student():
    def __init__(self,name,age):
        self.name=name
        self.age=age
students=[]
students.append(Student('jim',12))
students.append(Student('jack',13))
students.append(Student('rose',11))
for s in students:
    print(s.name, s.age)
print('------sort----------')
students.sort(key=lambda ss: ss.age, reverse=True)
for s in students:
    print(s.name, s.age)

结果如下。可以看到用key=lambda ss: ss.age这个表达式,就可以按照对象的age属性排序。

jim 12
jack 13
rose 11
------sort----------
jack 13
jim 12
rose 11

如果不改变原来students列表的顺序,用sorted方法即可。

对字典排序

除了对列表排序,我们还可以对字典进行排序。

dict1 = {"name": "Kevin", "age": "27", "gender": "true"}
# 升序
dict2 = sorted(dict1.items(), key=lambda dict1: dict1[0], reverse=False)
print("开始的字典数据:{}".format(dict1))
print("按照键进行升序后的数据:{}".format(dict2))
 
dict1 = {"name": "Kevin", "age": "27", "gender": "true"}
# 降序
dict2 = sorted(dict1.items(), key=lambda dict1: dict1[0], reverse=True)
print("开始的字典数据:{}".format(dict1))
print("按照键进行降序后的数据:{}".format(dict2))

如果要按照值来排序,这选取dict1[1]作为排序依据或者用字典的get方法获取排序依据。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值