摘要:內(nèi)置了字典的支持。字典的鍵值必須是可哈希的。當(dāng)不提供任何參數(shù)時(shí),創(chuàng)建的是一個(gè)空字典。例如函數(shù)獲取字典中指定的值,如果不存在則返回默認(rèn)值。刪除中的元素語法形式清空字典中的所有元素,字典仍存在,只不過為空字典。
Dict 字典 概述
dict全稱dictionary。Python內(nèi)置了字典dict的支持。
dict是一種映射類型,可以將一個(gè)物件和另外一個(gè)東西關(guān)聯(lián)起來,組成一個(gè)key-value 數(shù)據(jù)對(duì),而不管他
們各自的類型是什么。
字典的鍵值key必須是可哈希的。數(shù)字和字符串可以作為鍵值,但是列表和其他字典不可以。
鍵key具備唯一性,一個(gè)dict中key值唯一,當(dāng)key發(fā)生沖突時(shí),取最后該key的賦值value。
dict是無序的、可變的,使用鍵-值(key-value)對(duì)存儲(chǔ),具有極快的查找速度。
與list相比:在list中查找元素的方法,list越大,查找越慢。但是dict的實(shí)現(xiàn)方式,根據(jù)key值計(jì)算出value的存放位置,然后再去取存放位置的值。一個(gè)key只能對(duì)應(yīng)一個(gè)value值,提高了查找速度。
for key in dict_name: print(dict_name[key]) # 根據(jù)字典鍵key進(jìn)行排序輸出 for key in sorted(dict_name): # 是sorted(),不是sort() print(dict_name[key])(2)in 關(guān)鍵字 通過in關(guān)鍵字,判斷某鍵值key是否存在,返回True or False。例如
"pi" in d False(3)get( key,default=None) get()函數(shù)獲取字典中指定key的value值,如果不存在則返回默認(rèn)值。 同時(shí)也可以自己制定默認(rèn)返回值,例如get("pi",0),當(dāng)存在key為pi時(shí),則返回0.
>>> d.get("xiong") # 也可以直接 d["xiong"] 90 >>> d.get("pi",0) # 自己指定。如果不存在該key,就返回0,存在返回原值。 0(4)dict更新 當(dāng)dict里存在list類型時(shí),可以把list當(dāng)作一個(gè)item,且可以對(duì)其進(jìn)行l(wèi)ist的操作。例如:
inventory = { "gold" : 500, "pouch" : ["flint", "twine", "gemstone"], "backpack" : ["xylophone","dagger", "bedroll","bread loaf"] } # 新添加一個(gè)key-value inventory["burlap bag"] = ["apple", "small ruby", "three-toed sloth"] inventory["gold"] += 50 inventory["backpack"].sort() inventory["backpack"].remove("dagger")(5)pop():刪除dict中的key-value,指定或者默認(rèn)key。
>>> d = {"xiong":90,"li":95,"ping":100} >>> d.pop("xiong") 90 >>> d {"li": 95, "ping": 100}(6)del:刪除dict中的元素 語法形式:del dict_name[key_name]
>>> del d["ping"] >>> d {"li": 95}(7)clear() clear()清空字典中的所有元素,字典仍存在,只不過為空字典。
# 語法形式 >>> dict_name.clear()(8)len() 統(tǒng)計(jì)一個(gè)dict的長(zhǎng)度,即統(tǒng)計(jì)有多少個(gè)鍵值對(duì),使用形式:len(dict_name)。 (9)? dict的三個(gè)方法:keys()、values()、items() keys()、values()、items()3個(gè)方法返回值類型不再是列表,而是視圖對(duì)象(view objects)。其中: keys():返回dict_keys對(duì)象,可以查看字典的所有key,使用方法:dict_name.keys()。 values():返回dict_keys對(duì)象,可以查看字典的value,使用方法:dict_name.values()。 items():返回dict_items對(duì)象,可以查看字典所有的(key,value)二元元祖,dict.items()。 例如:
>>> d_1 = {1:"x",2:"y",3:"z"} >>> d_1.keys() dict_keys([1, 2, 3]) >>> >>> d_1.values() dict_values(["x", "y", "z"]) >>> >>> d_1.items() dict_items([(1, "x"), (2, "y"), (3, "z")]) >>> >>> type(d_1.keys()),type(d_1.values()),type(d_1.items()) (視圖對(duì)象可以動(dòng)態(tài)查看字典的內(nèi)容,每次字典變化時(shí),視圖會(huì)自動(dòng)更改: (10)copy():字典拷貝, , )
例如現(xiàn)在有dict1,要?jiǎng)?chuàng)建一個(gè)一樣的dict2,我們可以通過賦值操作“=”來創(chuàng)建一個(gè)內(nèi)容一樣的dict2,但是修改dict2的值會(huì)該表dict1的值:
>>> dict1 = {"up":"down","right":"left","true":"false"} >>> dict2 = dict1 >>> dict2["up"]="change" #對(duì)賦值而來dict2的修改會(huì)同時(shí)修改dict1(源) >>> dict1 {"up": "change", "right": "left", "true": "false"}
這是為什么呢?可以看下圖,通過賦值操作“=”創(chuàng)建的新的字典變量,其指向的id都是一樣的,所以當(dāng)修改新變量的內(nèi)容引用時(shí),源指向的id內(nèi)容也發(fā)生了改變。
如果要想修改新創(chuàng)建的變量而不影響源變量,可以使用copy()。例如,如下copy的值不會(huì)修改dict1的值
>>> dict1 = {"up":"down","right":"left","true":"false"} >>> copy = dict1.copy() # 字典copy是對(duì)dict1的拷貝 >>> copy["up"] = "change2" >>> dict1 # 對(duì)拷貝的copy字典修改不會(huì)修改源字典 {"up": "change", "right": "left", "true": "false"}總結(jié):
dict內(nèi)部存放的順序和key放入的順序是沒有關(guān)系的,即dict是無序的。
dict查找和插入的速度極快,不會(huì)隨著key的增加而變慢,平均復(fù)雜度為O(1)。
dict需要占用大量的內(nèi)存,內(nèi)存浪費(fèi)多。
而list相反:
查找和插入的時(shí)間隨著元素的增加而增加,時(shí)間復(fù)雜度為O(n)
占用空間小,浪費(fèi)內(nèi)存很少。
所以,dict是用空間來換取時(shí)間的一種方法。dict可以用在需要高速查找的很多地方,在Python代碼中幾乎無處不在,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對(duì)象。
? 在有些python中,dict并不一定會(huì)按照鍵-值的添加順序來保存元素的順序。
若要保證字典的順序性,則可以使用Python標(biāo)準(zhǔn)庫(kù)collections模塊OrderDict的有序字典。
使用方式:
from collections import OrderDict OrderDict().keys()
? 在復(fù)制和遍歷字典時(shí),最壞情況的復(fù)雜度為O(n),n為字典曾經(jīng)達(dá)到的最大元素?cái)?shù)目,而不是當(dāng)前字典的大小。So此時(shí)遍歷這個(gè)字典可能需要花相當(dāng)長(zhǎng)的時(shí)間。如果要頻繁地遍歷這個(gè)字典,最好的方式是創(chuàng)建一個(gè)新的字典對(duì)象,而不是在舊的字典中對(duì)元素進(jìn)行操作,刪除元素。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42267.html
摘要:字典的創(chuàng)建字典可以通過或一對(duì)花括號(hào)創(chuàng)建一個(gè)空字典。方法是字典對(duì)象名稱加方括號(hào)括起來的鍵名,比如。空字典的長(zhǎng)度是和類似于對(duì)列表的操作,不過這兩個(gè)函數(shù)檢驗(yàn)的是字典的鍵。修改了字典并沒有重新獲取,但是已經(jīng)反應(yīng)了變化,多了返回值的對(duì)象,。 字典(dict, dictionary的簡(jiǎn)寫)是Python中另一個(gè)非常重要的內(nèi)置數(shù)據(jù)類型,是Python中映射類型(Mapping Type),它把鍵(k...
摘要:如果要把一個(gè)對(duì)象放入散列表,那么首先要計(jì)算這個(gè)元素的散列值。總結(jié)這一篇主要介紹了常見的字典方法如何處理查不到的鍵標(biāo)準(zhǔn)庫(kù)中類型的變種散列表的工作原理散列表帶來的潛在影響參考鏈接最后,感謝女朋友支持。 這一篇是《流暢的 python》讀書筆記。主要介紹: 常見的字典方法 如何處理查不到的鍵 標(biāo)準(zhǔn)庫(kù)中 dict 類型的變種 散列表的工作原理 泛映射類型 collections.abc...
摘要:刪除字典元素和字典刪除鍵為的條目刪除中所有的條目刪除整個(gè)字典刪除并返回鍵為的條目二字典相關(guān)函數(shù)工廠方法工廠函數(shù)被用來創(chuàng)建字典。與函數(shù)方法相似,如果字典中鍵存在,刪除并返回,如果鍵不存在,且沒有給出的值,引發(fā)異常。 Python字典是另一種可變?nèi)萜髂P停铱纱鎯?chǔ)任意類型對(duì)象,如字符串、數(shù)字、元組等其他容器模型。一、創(chuàng)建字典(一)字典的增刪改查(1)字典的創(chuàng)建key:(不可變類型)數(shù)字、字...
摘要:字典,這個(gè)東西你現(xiàn)在還用嗎隨著網(wǎng)絡(luò)的發(fā)展,用的人越來越少了。最早的名字叫伍記小字典,但未能編纂完成。新華字典由商務(wù)印書館出版。成為迄今為止世界出版史上最高發(fā)行量的字典。也被稱為關(guān)聯(lián)數(shù)組或哈希表。 字典,這個(gè)東西你現(xiàn)在還用嗎?隨著網(wǎng)絡(luò)的發(fā)展,用的人越來越少了。不少人習(xí)慣于在網(wǎng)上搜索,不僅有web版,乃至于已經(jīng)有手機(jī)版的各種字典了。我曾經(jīng)用過一本小小的《新華字典》。 《新華字典》是...
摘要:如果兩個(gè)對(duì)象是相同的,那么它們的散列值一定是相同的。也就是說,一個(gè)可散列對(duì)象必須同時(shí)滿足以下三個(gè)條件支持方法,并且通過方法所獲得的散列值是不變的支持通過方法來判斷兩個(gè)對(duì)象的值是否相等若,則必有。 字典 dict類型是python語言的基石,所以python對(duì)于dict類型實(shí)現(xiàn)了高度優(yōu)化,而 散列表 則是字典類型性能突出的根本原因。 什么是可散列的數(shù)據(jù)類型 定義:如果一個(gè)對(duì)象是可散列的...
閱讀 3218·2023-04-26 02:27
閱讀 2143·2021-11-22 14:44
閱讀 4092·2021-10-22 09:54
閱讀 3199·2021-10-14 09:43
閱讀 753·2021-09-23 11:53
閱讀 12715·2021-09-22 15:33
閱讀 2711·2019-08-30 15:54
閱讀 2685·2019-08-30 14:04