Python的排序方法一般有两种一种是内建函数sorted 一种是列表才具有的方法sort ,sorted 是在容器外排序会生成一个新的容器,而sort仅仅是列表的一个方法,没有返回值不会生成一个新的容器。
def sorted(iterable: Iterable[_T], *,
key: Optional[Callable[[_T], Any]] = ...,
reverse: bool = ...) -> List[_T]: ...
def sort(self, *, key: Optional[Callable[[_T], Any]] = ..., reverse: bool = ...) -> None: ...
L = [1, 2, 5, 4, 9, 8, 7, 6] # 单列表 对L进行排序,如果参数reverse不填,默认是False递增排序-->升序.
不能直接print(L.sort()) 会返回一个None,因为sort没有返回值 返回的是None,是直接修改的元数据
L.sort()
print("sort():", L)
LL = sorted(L, reverse=True) # 对L再进行排序, reverse=True是递减排序也就是降序
print("sorted:", LL)
打印结果:
sort(): [1, 2, 4, 5, 6, 7, 8, 9]
sorted: [9, 8, 7, 6, 5, 4, 2, 1]
"""
对L2按照元组中的第二个元素进行排序,不能直接用sorted()或者L2.sort(),因为L2属于是一个多为数组了。
"""
L2 = [("a", 1), ('b', 4), ('d', 2), ('c', 3)] # 类型与数据库的行列
# 上诉两种方法都不行,所有就要用到key值了
L2.sort(key=lambda x: x[0], reverse=True) # 按照元组的第一个数排
print("sort():", L2)
LL2 = sorted(L2, key=lambda x: x[1], reverse=True) # 按照元组的第二个数排
print("sorted():", LL2)
打印结果:
sort(): [('d', 2), ('c', 3), ('b', 4), ('a', 1)]
sorted(): [('b', 4), ('c', 3), ('d', 2), ('a', 1)]
import operator
"""
对L3按照字典中的年龄进行排序
"""
L3 = [{'name': '李四', 'age': 22, 'sex': '男'}, {'name': '张三', 'age': 21, 'sex': '男'},
{'name': '李华', 'age': 30, 'sex': '女'}, {'name': '李华', 'age': 30, 'sex': '男'}] # Json数据
# 1 使用匿名函数 lambda
L3.sort(key=lambda x: x['age'])
print(L3)
LL3 = sorted(L3, key=lambda x: x['age'])
print(LL3)
"""note 如果需要多级排序,相应调整key值 key=lambda x:(x['age'],x['sex'])"""
# 使用operator.itemgetter 函数
"""
Return a callable object that fetches the given item(s) from its operand.
After f = itemgetter(2), the call f(r) returns r[2].
After g = itemgetter(2, 5, 3), the call g(r) returns (r[2], r[5], r[3])
"""
LLL3 = sorted(L3, key=operator.itemgetter('name'), reverse=True)
print(LLL3)
打印结果:
sort(): [{'name': '张三', 'age': 21, 'sex': '男'}, {'name': '李四', 'age': 22, 'sex': '男'}, {'name': '李华', 'age': 30, 'sex': '女'}, {'name': '李华', 'age': 30, 'sex': '男'}]
sorted() [{'name': '张三', 'age': 21, 'sex': '男'}, {'name': '李四', 'age': 22, 'sex': '男'}, {'name': '李华', 'age': 30, 'sex': '女'}, {'name': '李华', 'age': 30, 'sex': '男'}]
因为字典是哈希散列,所以Python中的字典是无序的,sort是字典的方法,所以不可以对字典进行排序,可以使用sorted
import operator
"""
对dict1字典进行排序
"""
dict1 = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(dict1.items(), key=lambda x: x[0], reverse=True)
print("lambda:", dict(sorted_x))
sorted1_x = sorted(dict1.items(), key=operator.itemgetter(0))
print("operator:", dict(sorted1_x))
打印结果:
lambda: {4: 3, 3: 4, 2: 1, 1: 2, 0: 0}
operator: {0: 0, 1: 2, 2: 1, 3: 4, 4: 3}
要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。
a = [1,2,3]
b=operator.itemgetter(1) # 定义函数b,获取对象的第1个域的值> b(a)
2
b=operator.itemgetter(1,0) # 定义函数b,获取对象的第1个域和第0个的值
b(a)
(2, 1)