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