Hello ,同為小白的朋友們大家好,這期主要為大家帶來有關字典的一些實用技巧。上篇筆記通過感人肺腑的老白讓大家認識到了字典這麼有用的資料型別,這一期讓我們看看如何能更好的操作字典。
基礎篇
下面我給大家來一個簡單的字典方法彙總,誠意滿滿,希望大家喜歡,如果有錯誤或者遺漏希望大神可以補上~
建立字典,得到字典中的鍵值,新增,修改,刪除,清空字典
stocks ={'IBM':146, # 建立字典
'MSFT':44,
'MAOTAI':1000}
stocks['IBM'] # 查詢字典中的一個值 Out:146
stocks.get('MSFT') # 查詢字典中的一個值 Out:44
stocks.get('a','Not found') # 查詢字典中的一個值,如果沒有,返回 Not found
stocks['a'] # 丟擲錯誤,因為字典中沒有這個值
stocks['IBM']=200 # 修改值
stocks['APPLE']=400 # 新增鍵和值
stocks.update({'APPLE':900,
'MAOTAI':0,
'MSFT':250}) # 一次修改多個值
del stocks['APPLE'] # 刪除一個值
stocks.pop['MAOTAI'] # 刪除並返回刪除的值
stocks.keys() # 獲得字典的所有鍵
stocks.values() # 獲得字典的所有值
stocks.items() # 獲得字典的所有鍵和值,形式為 (key,value)
for k,v in stocks.items(): # 遍歷一個字典,輸出它的鍵和值
print(k,v)
stocks.clear() #清空一個字典,讓字典為空
del stocks #直接刪除一個字典
好啦,基礎方法就這麼多大概,這裡建立了一個stocks字典用來表示股票名稱和價錢,然後在基礎上舉例子的,有兩點需要大家注意:
- 一次更新多個值的時候用update()方法會很方便
- 如果利用dict[key]的方式獲取一個字典中不存在的值會報錯,正確做法是用get()函式,效果好很多
奇淫巧技篇
建立字典歪門邪道之一: list + zip
除了常規的方式,還有很多其他方式可以幫助我們建立一個字典,比如我們這裡想要建立一個字典來表示一個學生的各科成績:
subject=['Math','Chinese','English','Science','Art']
marks=[80,78,96,60,75]
final_result=dict(zip(subject,marks))
print(final_result.items())
Out: dict_items([('Math', 80), ('Chinese', 78), ('English', 96), ('Science', 60), ('Art', 75)])
這裡其實很容易看懂,我們把subject的所有值作為key值,把marks所有值看成values的值,最後用Python很常見的zip就啪啪啪的將他們合併啦,形成了一個新的字典final_result
建立字典歪門邪道之二: 利用等號
上面的字典還可以通過這種形式來建立;
final_result= dict(Math=80,Chinese=78,English=96,Science=60,Art=75)
print(final_result.items())
Out: dict_items([('Math', 80), ('Chinese', 78), ('English', 96), ('Science', 60), ('Art', 75)])
字典排序: 根據鍵值Key排序
還是使用上面已經建好的字典 final_result,我們先根據字典中的鍵值來排序:
print(sorted(final_result.items())) # 自動根據鍵的值從小到大或者按照A-Z排序
Out:[('Art', 75), ('Chinese', 78), ('English', 96), ('Math', 80), ('Science', 60)]
換一種方式:
import operator
print(sorted(final_result.items(),key=operator.itemgetter(0)))
Out:[('Art', 75), ('Chinese', 78), ('English', 96), ('Math', 80), ('Science', 60)]
或者用lamba函式秀一波:
print(sorted(final_result.items(),key=lambda x:x[0]))
Out:[('Art', 75), ('Chinese', 78), ('English', 96), ('Math', 80), ('Science', 60)]
不要問我為什麼,我也在學,但是我深知在Python程式設計裝逼界你不用幾個lamba,reduce什麼的都不好意思和人打招呼,哈哈
如果我們想要實現根據鍵值倒序也很簡單:
print(sorted(final_result.items(),reverse=True))
Out:[('Science', 60), ('Math', 80), ('English', 96), ('Chinese', 78), ('Art', 75)]
字典排序: 根據Value值排序
其實大家看到了根據key的排序,也猜到了如何根據value 排序:
print(sorted(final_result.items(),key=lambda x:x[1])) #根據分數排序,從低到高
Out:[('Science', 60), ('Art', 75), ('Chinese', 78), ('Math', 80), ('English', 96)]
或者換一種方式:
import operator
print(sorted(final_result.items(),key=operator.itemgetter(1)))
Out:[('Science', 60), ('Art', 75), ('Chinese', 78), ('Math', 80), ('English', 96)]
倒序也是類似:
print(sorted(final_result.items(),key=lambda kv:kv[1],reverse=True))
Out:[('English', 96), ('Math', 80), ('Chinese', 78), ('Art', 75), ('Science', 60)]
這裡我在lamba後面沒有寫x,寫了一個kv,就是告訴大家這裡是什麼不太重要,先這麼理解就行
獲取字典的子集
我們將會一直使用上面的final_result字典來示範,這裡如果我們想要得到這個學生成績大於70分的字典子集應該怎麼做呢,很簡單:
final_result= dict(Math=80,Chinese=78,English=96,Science=60,Art=75)
above_seventy ={subject:mark for subject,mark in final_result.items() if mark >70}
print(above_seventy.items())
Out:dict_items([('Math', 80), ('Chinese', 78), ('English', 96), ('Art', 75)])
交換字典中的key和value的值
這個小技巧可以這樣實現:
exchange_key_value= dict(zip(final_result.values(),final_result.keys()))
print(exchange_key_value.items())
Out: dict_items([(80, 'Math'), (78, 'Chinese'), (96, 'English'), (60, 'Science'), (75, 'Art')])
獲取字典最大值最小值
簡直不要太簡單呀:
print("The best mark is {}".format(max(final_result.values())))
print("The worst mark is {}".format(min(final_result.values())))
Out: The best mark is 96
The worst mark is 60
總結
沒啥可說的啦,寫了這麼多,求老鐵們雙擊666鼓勵一波!!!!
完結,撒花~