成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python 數(shù)據(jù)類型 - dict 字典

Alfred / 2081人閱讀

摘要:內(nèi)置了字典的支持。字典的鍵值必須是可哈希的。當(dāng)不提供任何參數(shù)時,創(chuàng)建的是一個空字典。例如函數(shù)獲取字典中指定的值,如果不存在則返回默認值。刪除中的元素語法形式清空字典中的所有元素,字典仍存在,只不過為空字典。

Dict 字典 概述

dict全稱dictionary。Python內(nèi)置了字典dict的支持。

dict是一種映射類型,可以將一個物件和另外一個東西關(guān)聯(lián)起來,組成一個key-value 數(shù)據(jù)對,而不管他
們各自的類型是什么。

字典的鍵值key必須是可哈希的。數(shù)字和字符串可以作為鍵值,但是列表和其他字典不可以。

鍵key具備唯一性,一個dict中key值唯一,當(dāng)key發(fā)生沖突時,取最后該key的賦值value。

dict是無序的、可變的,使用鍵-值(key-value)對存儲,具有極快的查找速度。

與list相比:在list中查找元素的方法,list越大,查找越慢。但是dict的實現(xiàn)方式,根據(jù)key值計算出value的存放位置,然后再去取存放位置的值。一個key只能對應(yīng)一個value值,提高了查找速度。


一、創(chuàng)建字典 1、直接創(chuàng)建

2、使用dict()創(chuàng)建 使用dict創(chuàng)建,提供的參數(shù)必須成對出現(xiàn)。當(dāng)不提供任何參數(shù)時,創(chuàng)建的是一個空字典。 例如dict(([1,’x’],[2,’y’]))、dict(zip((1,2),(‘x’,’y’)))。

3、fromkeys(key,value)創(chuàng)建


二、操作 (1) for 循環(huán) for循環(huán)遍歷字典的key,例如:
for key in dict_name:
    print(dict_name[key])
    # 根據(jù)字典鍵key進行排序輸出
    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值,如果不存在則返回默認值。 同時也可以自己制定默認返回值,例如get("pi",0),當(dāng)存在key為pi時,則返回0.
>>> d.get("xiong")    # 也可以直接  d["xiong"]
90
>>> d.get("pi",0)     # 自己指定。如果不存在該key,就返回0,存在返回原值。
0
(4)dict更新 當(dāng)dict里存在list類型時,可以把list當(dāng)作一個item,且可以對其進行l(wèi)ist的操作。例如:
inventory = {
    "gold" : 500,
    "pouch" : ["flint", "twine", "gemstone"],
    "backpack" : ["xylophone","dagger", "bedroll","bread loaf"]
}
# 新添加一個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,指定或者默認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)計一個dict的長度,即統(tǒng)計有多少個鍵值對,使用形式:len(dict_name)。 (9)? dict的三個方法:keys()、values()、items() keys()、values()、items()3個方法返回值類型不再是列表,而是視圖對象(view objects)。其中: keys():返回dict_keys對象,可以查看字典的所有key,使用方法:dict_name.keys()。 values():返回dict_keys對象,可以查看字典的value,使用方法:dict_name.values()。 items():返回dict_items對象,可以查看字典所有的(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())
(, , )
視圖對象可以動態(tài)查看字典的內(nèi)容,每次字典變化時,視圖會自動更改:

(10)copy():字典拷貝

例如現(xiàn)在有dict1,要創(chuàng)建一個一樣的dict2,我們可以通過賦值操作“=”來創(chuàng)建一個內(nèi)容一樣的dict2,但是修改dict2的值會該表dict1的值:

>>> dict1 = {"up":"down","right":"left","true":"false"}
>>> dict2 = dict1
>>> dict2["up"]="change"  #對賦值而來dict2的修改會同時修改dict1(源) 
>>> dict1
{"up": "change", "right": "left", "true": "false"}

這是為什么呢?可以看下圖,通過賦值操作“=”創(chuàng)建的新的字典變量,其指向的id都是一樣的,所以當(dāng)修改新變量的內(nèi)容引用時,源指向的id內(nèi)容也發(fā)生了改變。

如果要想修改新創(chuàng)建的變量而不影響源變量,可以使用copy()。例如,如下copy的值不會修改dict1的值

>>> dict1 = {"up":"down","right":"left","true":"false"}
>>> copy = dict1.copy()    # 字典copy是對dict1的拷貝
>>> copy["up"] = "change2"
>>> dict1                  # 對拷貝的copy字典修改不會修改源字典
{"up": "change", "right": "left", "true": "false"}
總結(jié):

dict內(nèi)部存放的順序和key放入的順序是沒有關(guān)系的,即dict是無序的。

dict查找和插入的速度極快,不會隨著key的增加而變慢,平均復(fù)雜度為O(1)。

dict需要占用大量的內(nèi)存,內(nèi)存浪費多。

而list相反:

查找和插入的時間隨著元素的增加而增加,時間復(fù)雜度為O(n)

占用空間小,浪費內(nèi)存很少。

所以,dict是用空間來換取時間的一種方法。dict可以用在需要高速查找的很多地方,在Python代碼中幾乎無處不在,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對象。


三、注意陷阱

? 在有些python中,dict并不一定會按照鍵-值的添加順序來保存元素的順序。
若要保證字典的順序性,則可以使用Python標準庫collections模塊OrderDict的有序字典。
使用方式:

from collections import OrderDict
OrderDict().keys()

? 在復(fù)制和遍歷字典時,最壞情況的復(fù)雜度為O(n),n為字典曾經(jīng)達到的最大元素數(shù)目,而不是當(dāng)前字典的大小。So此時遍歷這個字典可能需要花相當(dāng)長的時間。如果要頻繁地遍歷這個字典,最好的方式是創(chuàng)建一個新的字典對象,而不是在舊的字典中對元素進行操作,刪除元素。


?持續(xù)更新ing...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42267.html

相關(guān)文章

  • python基礎(chǔ)教程:dict(字典)

    摘要:字典的創(chuàng)建字典可以通過或一對花括號創(chuàng)建一個空字典。方法是字典對象名稱加方括號括起來的鍵名,比如。空字典的長度是和類似于對列表的操作,不過這兩個函數(shù)檢驗的是字典的鍵。修改了字典并沒有重新獲取,但是已經(jīng)反應(yīng)了變化,多了返回值的對象,。 字典(dict, dictionary的簡寫)是Python中另一個非常重要的內(nèi)置數(shù)據(jù)類型,是Python中映射類型(Mapping Type),它把鍵(k...

    pumpkin9 評論0 收藏0
  • Python數(shù)據(jù)結(jié)構(gòu):字典

    摘要:如果要把一個對象放入散列表,那么首先要計算這個元素的散列值。總結(jié)這一篇主要介紹了常見的字典方法如何處理查不到的鍵標準庫中類型的變種散列表的工作原理散列表帶來的潛在影響參考鏈接最后,感謝女朋友支持。 這一篇是《流暢的 python》讀書筆記。主要介紹: 常見的字典方法 如何處理查不到的鍵 標準庫中 dict 類型的變種 散列表的工作原理 泛映射類型 collections.abc...

    BlackFlagBin 評論0 收藏0
  • python-數(shù)據(jù)類型字典

    摘要:刪除字典元素和字典刪除鍵為的條目刪除中所有的條目刪除整個字典刪除并返回鍵為的條目二字典相關(guān)函數(shù)工廠方法工廠函數(shù)被用來創(chuàng)建字典。與函數(shù)方法相似,如果字典中鍵存在,刪除并返回,如果鍵不存在,且沒有給出的值,引發(fā)異常。 Python字典是另一種可變?nèi)萜髂P?,且可存儲任意類型對象,如字符串、?shù)字、元組等其他容器模型。一、創(chuàng)建字典(一)字典的增刪改查(1)字典的創(chuàng)建key:(不可變類型)數(shù)字、字...

    SmallBoyO 評論0 收藏0
  • [零基礎(chǔ)學(xué)Python]字典,你還記得嗎?

    摘要:字典,這個東西你現(xiàn)在還用嗎隨著網(wǎng)絡(luò)的發(fā)展,用的人越來越少了。最早的名字叫伍記小字典,但未能編纂完成。新華字典由商務(wù)印書館出版。成為迄今為止世界出版史上最高發(fā)行量的字典。也被稱為關(guān)聯(lián)數(shù)組或哈希表。 字典,這個東西你現(xiàn)在還用嗎?隨著網(wǎng)絡(luò)的發(fā)展,用的人越來越少了。不少人習(xí)慣于在網(wǎng)上搜索,不僅有web版,乃至于已經(jīng)有手機版的各種字典了。我曾經(jīng)用過一本小小的《新華字典》。 《新華字典》是...

    galaxy_robot 評論0 收藏0
  • python學(xué)習(xí)筆記 關(guān)于字典

    摘要:如果兩個對象是相同的,那么它們的散列值一定是相同的。也就是說,一個可散列對象必須同時滿足以下三個條件支持方法,并且通過方法所獲得的散列值是不變的支持通過方法來判斷兩個對象的值是否相等若,則必有。 字典 dict類型是python語言的基石,所以python對于dict類型實現(xiàn)了高度優(yōu)化,而 散列表 則是字典類型性能突出的根本原因。 什么是可散列的數(shù)據(jù)類型 定義:如果一個對象是可散列的...

    cnsworder 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<