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