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