遲到的短文
0、前提講解
0.1 lambda 參數 : 表達式
lambda x:x
第一個x,在冒號前,表示判斷等效于 if x : ,后面則為返回x ,也可以對x進行操作
if x :
return x
0.2 sorted()函數常用內容
sorted(排序對象, key=排序根據的內容 ,cmp=排序的前后兩個單獨元素, reverse=False)
其他人的筆記:key 和 reverse 比一個等價的 cmp 函數處理速度要快。這是因為對于每個列表元素,cmp 都會被調用多次,而 key 和 reverse 只被調用一次
后面主要介紹 key 和 reverse 的組合進行排序
給出一個cmp使用的例子
L=[('b',2),('a',1),('c',3),('d',4)]
sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函數,這里的x,y 單次循環的第一次,就是 x,y=('b',2),('a',1)
x[1]==2
y[1]==1
結果就是 ('b',2)與('a',1)調換順序
0.3 字典對象的 items() 方法/函數
items()就是把字典里的每個keys values 組成個元組,依次傳出來總體也是一個元組
dict = {'Name': 'Runoob', 'Age': 7}
for i,j in dict.items(): #dict.items() 返回的實際上是元組((key1,value1)(key2,value2)(key3,value3))中的一個元組元素(key1,value1)
#左側用i,j 兩個元素接住key1,value1;以此類推
print(i, ":\t", j)
0.4 字典對象的 defaultdict()方法/函數
from collections import defaultdict
dict1 = defaultdict(int)
dict1[2] ='two'
dict2 = defaultdict(set)
dict3 = defaultdict(str)
dict4 = defaultdict(list)
dict5 = defaultdict(dict)
print(dict1[1])
print(dict2[1])
print(dict3[1])
print(dict4[1])
print(dict5[1])
結果
0 #這里被強制轉換為int 整數0了
set() #set 集合類型
#str 字符串類型,其實就是空字符串 “”
[] #list 列表類型
{} #dict 字典類型
1、普通字典內容排序
- 建立dict_sort 的keys 如下
abcd123_c1
abcd12_c2
abcd23_c1
abcd21_c1
dict_sort 內容建立如下
{"abcd123_c1":1,"abcd12_c2":2,"abcd23_c1":3,"abcd21_c1":4}
1.1 排序 key;
sorted(dict.keys(), key=lambda x:x ,reverse=False)
1.2 排序value;
sorted(dict.values(), key=lambda x:x ,reverse=False)
#只是單純的排序key或者value,只是返回元組;
1.3 split字符串后進行排序
這里利用split,對多個分列元素進行排序
for name in sorted(dict.keys(), key=lambda x:(x.split('_c')[0],int(x.split('_c')[1])) ,reverse=False):
pass
解析
key=lambda x:(x.split('_c')[0],int(x.split('_c')[1])) 解析
結構如下:key=lambda x:(a,b),曲兩個值作為第一比對和第二比對條件#參考excel中的高級排序
x.split('_c')[0],對x使用字符串“_c” 分割,取第一個元素
這里是對“_c'”前后兩個內容作為第一第二排序條件
#pass 只是一個占位符,編程時函數或者循環里不知道寫什么可以寫pass,類似 continue,什么也不做
多列排序
可以根據多個條件進行排序,這里用x的第0,3,4索引的內容作為第一,第二,第三排序條件
a=[[1,3,4] ,[2,4,2],[2,3,6]]
#這里時一個多維列表
a.sort(key=lambda x:(x[0],int(x[3]),int(x[4])))
排序結果:
a=[[1,3,4] ,[2,3,6],[2,4,2]]
默認升序,添加 reverse=True 可以倒序排序
根據特殊結構排序
test = defaultdict(list)
test={ "key1":[1,2,3,4], "key2:"[3,4,5,6] }
items = sorted(test.items(), key=lambda x:x[1][3], reverse=True)
#test.items() 返回時一個列表 ("key1",[1,2,3,4])
x[1] 則是[1,2,3,4]
x[1][3] 的話就是 4了
2、復雜列表排序
利用 key 和 reverse
L=[('b',2),('a',1),('c',3),('d',4)]
sorted(L, key=lambda x:x[1]))
利用cmp函數
L=[('b',2),('a',1),('c',3),('d',4)]
sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))
這里的x,y 單次循環的第一次,就是 x,y=('b',2),('a',1)
x[1]==2
y[1]==1
結果就是 ('b',2)與('a',1)調換順序
參考網址:
#參考網址并非完全的都看一遍;挑取對自己有用的信息看
Python字典按key、value排序問題詳解
python中defaultdict用法詳解
#說明defaultdict的用法就是設定好字典value的變量
Python sorted() 函數
#了解基本用法,或者說常說的函數原型,其實就是函數用起來時的基本參數有哪些