摘要:模塊中還有其他的映射類型,一個(gè)是有序字典,方法也有不同,它默認(rèn)刪除并返回最后一個(gè)元素。這使得他們的查找效率很高,受數(shù)據(jù)量影響很小。在字典和集合中,除了標(biāo)準(zhǔn)的字典和集合,之前只用到了有序字典。而在合適的場合,標(biāo)準(zhǔn)類型之外的字典和集合會更適合。
字典是我們經(jīng)常用到一種數(shù)據(jù)類型,而且也很方便。雖然用得很多,但是我對它的操作也僅限于取值,賦值,創(chuàng)建新字典。
首先出現(xiàn)是兩個(gè)抽象基類,為dict和其他泛映射類型定義了接口。然后是字典推導(dǎo),這個(gè)跟之前的列表推導(dǎo)差不多,不難。創(chuàng)建字典的方法也有很多,之前常用的也只是兩三種——直接把字典賦值給一個(gè)對象、使用dict()把其他序列轉(zhuǎn)為字典。
然后是字典的一個(gè)之前沒用過的方法setdefault,它用來處理找不到的鍵。而另一個(gè)相似的方法get我也不怎么用,都是用d[x]這樣的形式。
另一類型的字典,collections 模塊中的 defaultdict,可以替代上面的setdefault方法。創(chuàng)建時(shí)提供一個(gè)對象,在之后取某個(gè)鍵,但不存在時(shí)調(diào)用__getitem__方法返回某個(gè)默認(rèn)值。
后面的,依舊沒看完。明天看吧。
這次遇到了特殊方法__missing__,當(dāng)指定鍵不存在的時(shí)它就會被調(diào)用。所有映射類型都一樣,都是在找不到指定鍵時(shí)會調(diào)用它。但要注意的是,__missing__只會被__getitem__調(diào)用。
collections 模塊中還有其他的映射類型,一個(gè)是有序字典 OrderdDict,popitem方法也有不同,它默認(rèn)刪除并返回最后一個(gè)元素。ChainMap 對象容納多個(gè)映射對象,然后對其進(jìn)行查找的時(shí)候,它被當(dāng)作一個(gè)整體進(jìn)行查找。Counter 對象為鍵這樣一個(gè)整數(shù)計(jì)數(shù)器,「每次更新一個(gè)鍵的時(shí)候都會增加這個(gè)計(jì)數(shù)器」。書上一個(gè)例子是用來計(jì)算字符串中每個(gè)字符出現(xiàn)的次數(shù)。
UserDict 是用純 Python 把標(biāo)準(zhǔn) dict 實(shí)現(xiàn)了一遍,由于用戶繼承寫子類。它繼承自超類 MutableMapping。
關(guān)于字典,還有就是不可變映射類型了。types 模塊中的 MappingProxyType 就是這樣。它返回的是視圖,用戶不能對視圖進(jìn)行修改。但它是動態(tài)的,對原映射的修改它可以看到。
之后就是集合了。這個(gè)數(shù)據(jù)類型也經(jīng)常用到,它支持集合推導(dǎo),跟之前的字典推導(dǎo)、列表推導(dǎo)差不多。它還有不可變的姊妹類型 frozenset。
在他們背后,底層實(shí)現(xiàn)是散列表。這使得他們的查找效率很高,受數(shù)據(jù)量影響很小。這是用空間換取的時(shí)間,而一開始空間不會很大,當(dāng)數(shù)據(jù)量增大的時(shí)候,到一定程度,會把數(shù)據(jù)復(fù)制到新的更大的空間,所以集合的元素順序不穩(wěn)定。
在字典和集合中,除了標(biāo)準(zhǔn)的字典和集合,之前只用到了有序字典。而在合適的場合,標(biāo)準(zhǔn)類型之外的字典和集合會更適合。果然要多動手啊。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41567.html
摘要:小總結(jié)標(biāo)準(zhǔn)庫里的所有映射類型都是利用來實(shí)現(xiàn)只有可散列的數(shù)據(jù)類型才能用作這些映射里的鍵值不用字典推導(dǎo)用處理找不到的鍵找不到鍵返回某種默認(rèn)值底層是與調(diào)用實(shí)現(xiàn)的字典插入更新原理其他大多數(shù)映射類型都提供了兩個(gè)很強(qiáng)大的方法和。 字典和集合 標(biāo)準(zhǔn)庫里的所有映射類型都是利用 dict 來實(shí)現(xiàn)的只有可散列的數(shù)據(jù)類型才能用作這些映射里的鍵(值不用) 可散列 一個(gè)對象是可散列的 它的散列值是不變的 對象...
摘要:流暢的中有很多奇技淫巧,整本書都在強(qiáng)調(diào)如何最大限度地利用標(biāo)準(zhǔn)庫。常見的扁平序列包括,,等。數(shù)組支持所有跟可變序列有關(guān)的操作,包括和。和用于指定列表的區(qū)間,默認(rèn)是使用整個(gè)列表。但是元組的賦值不被允許,當(dāng)異發(fā)生時(shí) 流暢的python中有很多奇技淫巧,整本書都在強(qiáng)調(diào)如何最大限度地利用Python 標(biāo)準(zhǔn)庫。介紹了很多python的不常用的數(shù)據(jù)類型、操作、庫等,對于入門python后想要提升對p...
摘要:第一章數(shù)據(jù)類型隱式方法利用快速生成字典方法方法通過下標(biāo)找元素自動支持切片操作可迭代方法與如果是一個(gè)自定義類的對象,那么會自己去調(diào)用其中由你實(shí)現(xiàn)的方法。若返回,則會返回否則返回。一個(gè)對象沒有函數(shù),解釋器會用作為替代。 第一章 python數(shù)據(jù)類型 1 隱式方法 利用collections.namedtuple 快速生成字典 import collections Card = coll...
閱讀 1984·2021-11-25 09:43
閱讀 665·2021-10-11 10:58
閱讀 1742·2019-08-30 15:55
閱讀 1737·2019-08-30 13:13
閱讀 746·2019-08-29 17:01
閱讀 1851·2019-08-29 15:30
閱讀 806·2019-08-29 13:49
閱讀 2182·2019-08-29 12:13