講一下python里的sorted排序
a = [
{"time": "2012-12-12 00:00:00"},
{"time": "2012-12-14 00:00:00"},
{"time": "2012-12-16 00:00:00"},
{"time": "2012-12-18 00:00:00"},
{"time": "2012-12-16 00:00:00"},
{"time": "2012-12-17 00:00:00"},
{"time": "2012-12-10 00:00:00"},
{"time": "2012-12-11 00:00:00"},
]
b = sorted(a, key=lambda d: d['time'])
b = [
{'time': '2012-12-10 00:00:00'},
{'time': '2012-12-11 00:00:00'},
{'time': '2012-12-12 00:00:00'},
{'time': '2012-12-14 00:00:00'},
{'time': '2012-12-16 00:00:00'},
{'time': '2012-12-16 00:00:00'},
{'time': '2012-12-17 00:00:00'},
{'time': '2012-12-18 00:00:00'}
]
sorted里key接受的是一個函數(shù),排序的時候柿菩,將key接收的函數(shù)分別作用于序列的子內(nèi)容戚嗅,然后通過key函數(shù)返回值排序。
如上所示碗旅,實際上sorted函數(shù)排序的是每個{"time":"xxxx"}
的time
值
亦可通過下面的快排實現(xiàn)
def QuickSort(L, low, high):
"""專用快排"""
i = low
j = high
if i >= j:
return L
key = L[i]
while i < j:
while i < j and L[j]["time"] >= key["time"]:
j = j - 1
L[i] = L[j]
while i < j and L[i]["time"] <= key["time"]:
i = i + 1
L[j] = L[i]
L[i] = key
QuickSort(L, low, i - 1)
QuickSort(L, j + 1, high)
return L[::-1]
def fun(a, b):
if a["time"] > b["time"]:
return -1
else:
return 1
c=sorted(a, cmp=fun)
c=[
{'time': '2012-12-18 00:00:00'},
{'time': '2012-12-17 00:00:00'},
{'time': '2012-12-16 00:00:00'},
{'time': '2012-12-16 00:00:00'},
{'time': '2012-12-14 00:00:00'},
{'time': '2012-12-12 00:00:00'},
{'time': '2012-12-11 00:00:00'},
{'time': '2012-12-10 00:00:00'}
]
c=sorted(a, cmp=fun)
意思是遍歷a列表的時候渡处,分別取相鄰的兩個數(shù)帶入fun函數(shù)中 如果fun函數(shù)返回的是正數(shù),則交換相鄰的兩個數(shù)據(jù)祟辟,反之医瘫,不交換
sorted還有個reverse參數(shù),表示是否逆序旧困,默認為reverse=False 升序排列醇份。
sort方法也一樣有這些功能