一、列表排序
举例sort和sorted对列表排序,说明两者的区别。
import re
list1 = [0, -1, 3, -10, 5, 9]
list1.sort(reverse=False)
print('list1.sort在list1基础上修改,无返回值', list1)
list2 = [0, -1, 3, -10, 5, 9]
res = sorted(list2, reverse=False)
print('sorted有返回值是新的list', list2)
print('返回值', res)
对list排序,使用lambda函数从小到大排序 。
foo = [-5, 8, 0, 4, 9, -4, -20, -2, 8, 2, -4]
a = sorted(foo, key=lambda x: x)
print(a)
使用lambda函数对list排序,输出结果为[0,2,4,8,8,9,-2,-4,-4,-5,-20],正数从小到大,负数从大到小。
foo = [-5, 8, 0, 4, 9, -4, -20, -2, 8, 2, -4]
a = sorted(foo, key=lambda x: (x < 0, abs(x)))
print(a)
二、列表嵌套排序
1、 列表嵌套字典排序 ,分别根据年龄和姓名排序。
foo = [{'name': 'zs', 'age': 19}, {'name': 'll', 'age': 54}, {'name': 'wa', 'age': 17}, {'name': 'df', 'age': 23}]
a = sorted(foo, key=lambda x: x['name']) # 姓名从小到大
b = sorted(foo, key=lambda x: x['age'], reverse=True) # 年龄从大到小
print(a)
print(b)
2、列表嵌套元祖排序 ,分别按字母和数字排序。
foo = [('zs', 19), ('ll', 54), ('wa', 17), ('df', 23)]
a = sorted(foo, key=lambda x: x[0]) # 字母从小到大
b = sorted(foo, key=lambda x: x[1], reverse=True) # 数字从大到小
print(a)
print(b)
2、列表嵌套列表排序 ,年龄数字相同怎么办?
foo = [['zs', 19], ['ll', 54], ['wa', 17], ['df', 23], ['xf', 23]]
a = sorted(foo, key=lambda x:(x[1], x[0]))
print(a)
三、字典排序
1、根据键对字典排序(方法一,zip函数)。
dict1 = {'name': 'zs', 'sex': 'man', 'city': 'bj'}
foo = zip(dict1.keys(), dict1.values()) # 字典转成列表嵌套元祖
a = sorted(foo, key=lambda x: x[0])
print('根据键排序', a)
new_dict = {i[0]: i[1] for i in a}
print(new_dict)
2、根据键对字典排序(方法二,zip函数)。
dic = {'name': 'zs', 'sex': 'man', 'city': 'bj'}
print(dic.items())
b = sorted(dic.items(), key=lambda x: x[0])
print('根据键排序', b)
new_dict = {i[0]: i[1] for i in b}
print(new_dict)
小考: 根据字符串长度排序。
s = ['ab', 'abc', 'a', 'djkj']
a = sorted(s, key=lambda x: len(x))
s.sort(key=len)
print(a)
print(s)