摘要:新年快樂大家好,今天是大年初二,身在國外沒有過年的氛圍,只能踏實寫寫文章,對社區(qū)做點貢獻,在此祝大家新年快樂上一期為大家梳理了一些的進階用法,今天我們來看字典的相關技巧,我個人在編程中對字典的使用非常頻繁,其實對于不是非常大的數(shù)據(jù)存儲需求,
新年快樂
大家好,今天是大年初二,身在國外沒有過年的氛圍,只能踏實寫寫文章,對社區(qū)做點貢獻,在此祝大家新年快樂!上一期為大家梳理了一些List的進階用法,今天我們來看字典Dict的相關技巧,我個人在編程中對字典的使用非常頻繁,其實對于不是非常大的數(shù)據(jù)存儲需求,字典是一個不錯的選擇,比List要快的多,我在基礎篇里面講過了一些關于dict的基礎方法,如果沒有看過的朋友們可以點擊鏈接Python 基礎起步 (八) 字典實用技巧大全 ,好啦,閑話少說,現(xiàn)在讓我們一起來看看今天的進階技巧吧~
字典進階方法匯總創(chuàng)建字典
這里介紹最常見的幾種方式,直接上例子:
first = {} # 創(chuàng)建空字典 second = dict() # 創(chuàng)建空字典 keys = ["Name","Age","Job","Salary"] values = ["White",50,"cook",10000] third=dict(zip(keys,values)) # Zip創(chuàng)建 fouth = dict(Name="White",Age=50,Job="cook",Salary=10000) # 等號創(chuàng)建 fifth = {1: {"name": "John", "age": "27", "sex": "Male"}, 2: {"name": "Marie", "age": "22", "sex": "Female"}} # 創(chuàng)建一個嵌套字典 print(first) print(second) print(third) print(fouth) print(fifth[1]) Out: {} {} {"Name": "White", "Age": 50, "Job": "cook", "Salary": 10000} {"Name": "White", "Age": 50, "Job": "cook", "Salary": 10000} {"name": "John", "age": "27", "sex": "Male"}
這里我們可以直接用{}或者dict()創(chuàng)建空的字典,或者直接為字典以key:value的形式賦值,Zip和等號直接賦值也很方便,如果需要多層nested也可以很簡單的實現(xiàn),有關創(chuàng)建就說這么多啦
字典排序
有關字典排序,我們有兩種選擇,第一是根據(jù)字典的key值排序,第二是根據(jù)Value值排序,讓我們一個個來看,首先讓我們新建一個字典用于測試:
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)])
這里我們創(chuàng)建一個字典final_result,key值是科目的名字,value值是分數(shù),首先根據(jù)Key值進行排序,首先讓我們根據(jù)Key值升序,可選的方法很多,比如sorted, operator, lamba :
print(sorted(final_result.items())) # 根據(jù)key的值升序 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)]
print(sorted(final_result.items(),key=lambda x:x[0])) Out:[("Art", 75), ("Chinese", 78), ("English", 96), ("Math", 80), ("Science", 60)]
根據(jù)key值降序只要加個reverse=True就好了,因為sorted函數(shù)默認reverse=False,看下結果:
print(sorted(final_result.items(),reverse=True)) # 根據(jù)key的值降序 Out:[("Science", 60), ("Math", 80), ("English", 96), ("Chinese", 78), ("Art", 75)]
import operator print(sorted(final_result.items(),key=operator.itemgetter(0),reverse=True)) Out:[("Science", 60), ("Math", 80), ("English", 96), ("Chinese", 78), ("Art", 75)]
print(sorted(final_result.items(),key=lambda x:x[0],reverse=True)) Out:[("Science", 60), ("Math", 80), ("English", 96), ("Chinese", 78), ("Art", 75)]
有關lamba函數(shù)實在有太多可以總結的,我會在之后專門拿一期來講,和filter reduce簡直是神器,當我逐漸使用的多了后終于感受到了一點點pythonic的感覺,哈哈
其實大家看到了根據(jù)key的排序,也猜到了如何根據(jù)value 排序,讓我們先看升序:
print(sorted(final_result.items(),key=lambda x:x[1])) #根據(jù)Value升序 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)]
降序也一樣,無非就是加上reverse=True,這里不一一舉例了:
print(sorted(final_result.items(),key=lambda v:v[1],reverse=True)) Out:[("English", 96), ("Math", 80), ("Chinese", 78), ("Art", 75), ("Science", 60)]
字典合并(Merge)
在Python 3.5以上可以直接用**,是一個常用的小技巧,在此對于2.7的用戶說一聲對不起,技術一直說是喜新厭舊呀,讓我們看一個小栗子:
def Merge(dict1, dict2): res = {**dict1, **dict2} return res dict1 = {"a": 10, "b": 8,"c":2} dict2 = {"d": 6, "c": 4} dict3 = Merge(dict1, dict2) print(dict3) Out:{"a": 10, "b": 8, "c": 4, "d": 6}
這里順序很重要,大家一定要看好是誰覆蓋了誰,如果我們交換一下順序就會變成這樣:
def Merge(dict1, dict2): res = {**dict2, **dict1} # 交換了順序 return res dict1 = {"a": 10, "b": 8,"c":2} dict2 = {"d": 6, "c": 4} dict3 = Merge(dict1, dict2) print(dict3) Out:{"d": 6, "c": 2, "a": 10, "b": 8}
對于Python2的朋友們不用擔心,自然有解決方案,那就是用update函數(shù),也很方便,上代碼:
dict1 = {"a": 10, "b": 8,"c":2} dict2 = {"d": 6, "c": 4} dict2.update(dict1) print(dict2) Out:{"d": 6, "c": 2, "a": 10, "b": 8}
利用Json.dumps()美化輸出dict
我們?nèi)绻龅揭韵逻@種情況的dict,如果按照常規(guī)print輸出會這樣:
my_mapping = {"a": 23, "b": 42, "c": 0xc0ffee} print(my_mapping) Out:{"a": 23, "b": 42, "c": 12648430}
但是如果我們能引用json庫里的dumps方法會得到好的多的效果:
import json print(json.dumps(my_mapping, indent=4, sort_keys=True)) Out:{ "a": 23, "b": 42, "c": 12648430 }
字典參數(shù)解包
Python里面方便神奇的方法很多,比如下面這個,可以實現(xiàn)解包字典:
def unpack(k1,k2,k3): print(k1,k2,k3) my_dict = {"k1":"value1","k2":"value2","k3":"value3"} unpack(**my_dict) Out: value1 value2 value3
順便提一下哈,有關 args和kwargs的方法我會專門在后面的一期講,敬請期待!
字典推導式
這個我寫的比較糾結,因為咨詢了我的主管,他推薦我盡量不要用,我也不太懂其中原因,不知道有沒有大神可以出來解答一下哈,具體用法和List的推導式一樣,上代碼:
import json first = {x:"A"+str(x) for x in range(8)} print(json.dumps(first,indent=4, sort_keys=True)) # 這種情況用json輸出好看些 Out:{ "0": "A0", "1": "A1", "2": "A2", "3": "A3", "4": "A4", "5": "A5", "6": "A6", "7": "A7" }
或者可以這么用:
second={v:k for k,v in first.items()} print(json.dumps(second,indent=4)) Out:{ "A0": 0, "A1": 1, "A2": 2, "A3": 3, "A4": 4, "A5": 5, "A6": 6, "A7": 7 }
至于其他亂七八糟的用法大家可以自己去想哈哈
總結今天系統(tǒng)地為大家梳理了幾點:
創(chuàng)建字典不同方法
字典排序
字典合并
字典解包
json優(yōu)化輸出
字典推導式
希望可以幫到大家,后續(xù)如果我發(fā)想有什么有意思的方法和技巧我會加上,再次祝大家新年快樂!?。?!
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/43156.html
摘要:嘗射于家圃,有賣油翁釋擔而立,睨之,久而不去??得C問曰汝亦知射乎吾射不亦精乎翁曰無他,但手熟爾。康肅忿然曰爾安敢輕吾射翁曰以我酌油知之。 開啟變身模式 大家好, 從這一期開始,我們會從小白變身為中等小白,在基礎起步階段有太多的東西我沒有講到,但是俗話說的好,無他,但手熟爾,只要多多練習,時間會是最好的證明,相信我們終有一天會成為高手,因此從這一系列開始,讓我們一起更上一層樓,還是和往常...
摘要:什么是推導式大家好,今天為大家?guī)韱栁易钕矚g的推導式使用指南,讓我們先來看看定義推導式是的一種獨有特性,推導式是可以從一個數(shù)據(jù)序列構建另一個新的數(shù)據(jù)序列的結構體。 什么是推導式 大家好,今天為大家?guī)韱栁易钕矚g的Python推導式使用指南,讓我們先來看看定義~ 推導式(comprehensions)是Python的一種獨有特性,推導式是可以從一個數(shù)據(jù)序列構建另一個新的數(shù)據(jù)序列的結構體。...
摘要:它需要一個函數(shù)默認工廠作為其參數(shù)。默認情況下設置為,即如果鍵不存在則為,并返回并顯示默認值。因此,它是一個無序集合,其中元素及其各自的計數(shù)存儲為字典。這相當于其他語言的或。使用,我們不必使用整數(shù)索引來訪問元組的成員。 神奇的collections 大家好,今天想和大家分享一個Python里面非常棒的模快:Collections 該模塊實現(xiàn)了專門的容器數(shù)據(jù)類型,為Python的通用內(nèi)置容...
摘要:上個月,學習群里的同學問了個題目,大意可理解為列表降維,例子如下想得到結果原始數(shù)據(jù)是一個二維列表,目的是獲取該列表中所有元素的具體值。不經(jīng)意間,函數(shù)的注意事項,竟把其它的進階內(nèi)容都聯(lián)系起來了。小小的函數(shù),竟成為學習之路上的一個樞紐。 上個月,學習群里的 S 同學問了個題目,大意可理解為列表降維 ,例子如下: oldlist = [[1, 2, 3], [4, 5]] # 想得到結果:...
閱讀 2173·2021-09-04 16:40
閱讀 1471·2021-08-13 15:07
閱讀 3612·2019-08-30 15:53
閱讀 3203·2019-08-30 13:11
閱讀 1082·2019-08-29 17:22
閱讀 1821·2019-08-29 12:47
閱讀 1481·2019-08-29 11:27
閱讀 2235·2019-08-26 18:42