文章目录
- 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方法获取排序依据。
最后
以上就是爱笑煎蛋最近收集整理的关于用sort(),sorted()对列表的数据,字典和对象进行排序sort()的用法sorted()的用法一般数字列表排序包含字典的列表排序包含对象的列表排序对字典排序的全部内容,更多相关用sort(),sorted()对列表内容请搜索靠谱客的其他文章。
发表评论 取消回复