摘要:我們用函數(shù),來(lái)簡(jiǎn)單快捷地創(chuàng)建這個(gè)字典輸出結(jié)果與原先代碼一致。示例代碼如下版本為無(wú)序字典有序字典輸出的結(jié)果為無(wú)序字典有序字典默認(rèn)字典是內(nèi)建類(lèi)的一個(gè)子類(lèi),第一個(gè)參數(shù)為屬性提供初始值,默認(rèn)為。
??字典(dict)結(jié)構(gòu)是Python中常用的數(shù)據(jù)結(jié)構(gòu),筆者結(jié)合自己的實(shí)際使用經(jīng)驗(yàn),對(duì)字典方面的相關(guān)知識(shí)做個(gè)小結(jié),希望能對(duì)讀者一些啟發(fā)~
創(chuàng)建字典??常見(jiàn)的字典創(chuàng)建方法就是先建立一個(gè)空字典,然后逐一添加鍵(key)和值(value),比如創(chuàng)建字典person={"name":"Tome", "age":22, "city":"Shanghai, "ID": "073569"},可以使用以下代碼:
person = {} person["name"] = "Tom" person["age"] = 22 person["city"] = "Shanghai" person["ID"] = "073569" print(person)
輸出結(jié)果為:
{"name": "Tom", "age": 22, "city": "Shanghai", "ID": "073569"}
這樣的創(chuàng)建方式簡(jiǎn)單原始,代碼不夠簡(jiǎn)潔優(yōu)雅。我們用zip函數(shù),來(lái)簡(jiǎn)單快捷地創(chuàng)建這個(gè)字典:
attrs = ["name", "age", "city", "ID"] values = ["Tom", 22, "Shanghai", "073569"] person = dict(zip(attrs, values)) print(person)
輸出結(jié)果與原先代碼一致。
遍歷字典??在實(shí)際應(yīng)用中,我們常常需要遍歷字典,實(shí)現(xiàn)的方法可參考以下代碼:
attrs = ["name", "age", "city", "ID"] values = ["Tom", 22, "Shanghai", "073569"] person = dict(zip(attrs, values)) for key, value in person.items(): print("Key:%-6s, Value:%s"%(key, value))
輸出結(jié)果為:
Key:name , Value:Tom Key:age , Value:22 Key:city , Value:Shanghai Key:ID , Value:073569對(duì)調(diào)鍵值對(duì)
??在實(shí)際應(yīng)用中,有時(shí)候我們需要查找字典中某個(gè)值(value)對(duì)應(yīng)的鍵(key),遍歷字典是一種選擇,對(duì)調(diào)鍵值對(duì)是另一種選擇。對(duì)調(diào)鍵值對(duì)的實(shí)現(xiàn)代碼如下:
attrs = ["name", "age", "city", "ID"] values = ["Tom", 22, "Shanghai", "073569"] person = dict(zip(attrs, values)) print("對(duì)調(diào)前:") print(person) Person = {v:k for k,v in person.items()} print("對(duì)調(diào)后:") print(Person)
輸出結(jié)果為:
對(duì)調(diào)前: {"name": "Tom", "age": 22, "city": "Shanghai", "ID": "073569"} 對(duì)調(diào)后: {"Tom": "name", 22: "age", "Shanghai": "city", "073569": "ID"}有序字典OrderedDict
??Python中的字典是無(wú)序的,其取出來(lái)的鍵是無(wú)序的,因?yàn)樗前凑説ash來(lái)儲(chǔ)存的。有時(shí)候,我們需要字典的條目(items)或鍵(keys)是有序儲(chǔ)存的,這時(shí)候可以使用collections模塊中的OrderedDict,它是一種有序的字典結(jié)構(gòu)。
??示例代碼如下(Python版本為3.5.2):
from collections import OrderedDict d = {} d["Tom"]="A" d["Jack"]="B" d["Leo"]="C" d["Alex"]="D" print("無(wú)序字典(dict):") for k,v in d.items(): print(k,v) d1 = OrderedDict() d1["Tom"]="A" d1["Jack"]="B" d1["Leo"]="C" d1["Alex"]="D" print(" 有序字典(OrderedDict):") for k,v in d1.items(): print(k,v)
輸出的結(jié)果為:
無(wú)序字典(dict): Leo C Jack B Tom A Alex D 有序字典(OrderedDict): Tom A Jack B Leo C Alex D默認(rèn)字典collections.defaultdict
??collections.defaultdict是Python內(nèi)建dict類(lèi)的一個(gè)子類(lèi),第一個(gè)參數(shù)為default_factory屬性提供初始值,默認(rèn)為None。它覆蓋一個(gè)方法并添加一個(gè)可寫(xiě)實(shí)例變量。它的其他功能與dict相同,但會(huì)為一個(gè)不存在的鍵提供默認(rèn)值,從而避免KeyError異常。
??我們以統(tǒng)計(jì)列表中單詞的詞頻為例,展示collections.defaultdict的優(yōu)勢(shì)。
??一般情形下,我們統(tǒng)計(jì)列表中的單詞詞頻代碼為:
words = ["sun", "moon", "star", "star", "star", "moon", "sun", "star"] freq_dict = {} for word in words: if word not in freq_dict.keys(): freq_dict[word] = 1 else: freq_dict[word] += 1 for key, val in freq_dict.items(): print(key, val)
輸出結(jié)果如下:
sun 2 moon 2 star 4
??使用collections.defaultdict,代碼可以?xún)?yōu)化:
from collections import defaultdict words = ["sun", "moon", "star", "star", "star", "moon", "sun", "star"] freq_dict = defaultdict(int) for word in words: freq_dict[word] += 1 for key, val in freq_dict.items(): print(key, val)
其它默認(rèn)初始值可以為set,list,dict等。
注意:本人現(xiàn)已開(kāi)通微信公眾號(hào): Python爬蟲(chóng)與算法(微信號(hào)為:easy_web_scrape), 歡迎大家關(guān)注哦~~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/44815.html
摘要:本文針對(duì)前面利用所做的一次數(shù)據(jù)匹配實(shí)驗(yàn),整理了其中的一些對(duì)于文件的讀寫(xiě)操作和常用的數(shù)據(jù)結(jié)構(gòu)如字典和列表之間的轉(zhuǎn)換文件與列表之間的轉(zhuǎn)換將列表轉(zhuǎn)換為文件將嵌套字典的列表轉(zhuǎn)換為文件將列表轉(zhuǎn)換為文件最基本的轉(zhuǎn)換,將列表中的元素逐行寫(xiě)入到文件中將嵌套 本文針對(duì)前面利用Python 所做的一次數(shù)據(jù)匹配實(shí)驗(yàn),整理了其中的一些對(duì)于csv文件的讀寫(xiě)操作和常用的Python數(shù)據(jù)結(jié)構(gòu)(如字典和列表)之間的轉(zhuǎn)...
摘要:以自定義字典為例僅作演示,不保證其它功能的完備性貓輸出結(jié)果上例的關(guān)鍵點(diǎn)在于將字典的鍵值取出,并對(duì)鍵值的列表做切片處理,其妙處在于,不用擔(dān)心索引越界和負(fù)數(shù)索引,將字典切片轉(zhuǎn)換成了字典鍵值的切片,最終實(shí)現(xiàn)目的。 2018-12-31 更新聲明:切片系列文章本是分三篇寫(xiě)成,現(xiàn)已合并成一篇。合并后,修正了一些嚴(yán)重的錯(cuò)誤(如自定義序列切片的部分),還對(duì)行文結(jié)構(gòu)與章節(jié)銜接做了大量改動(dòng)。原系列的單篇...
摘要:如果你有疑問(wèn),或許可以參考創(chuàng)建密鑰使用谷歌將語(yǔ)音轉(zhuǎn)換為文字。將其取出,得到字典。 在之前發(fā)布的使用谷歌Cloud Speech API將語(yǔ)音轉(zhuǎn)換為文字一文中,我們實(shí)現(xiàn)了在控制臺(tái)使用curl發(fā)送post請(qǐng)求,得到語(yǔ)音轉(zhuǎn)文字的結(jié)果;而在Python中使用谷歌Cloud Speech API將語(yǔ)音轉(zhuǎn)換為文字一文中,我們實(shí)現(xiàn)了安裝Cloud Speech API客戶(hù)端庫(kù),通過(guò)調(diào)用庫(kù)函數(shù)得到語(yǔ)音...
閱讀 7100·2021-09-22 15:08
閱讀 2114·2021-08-24 10:03
閱讀 2591·2021-08-20 09:36
閱讀 1550·2020-12-03 17:22
閱讀 2596·2019-08-30 15:55
閱讀 1113·2019-08-29 16:13
閱讀 3207·2019-08-29 12:41
閱讀 3388·2019-08-26 12:12