再談collections模塊defaultdict()和namedtuple()


defaultdict()和namedtuple()是collections模塊里面2個很實用的擴展類型。一個繼承自dict系統內置類型,一個繼承自tuple系統內置類型。在擴展的同時都添加了額外的很酷的特性,而且在特定的場合都很實用。

defaultdict()

定義以及作用

返回一個和dictionary類似的對象,和dict不同主要體現在2個方面:

  • 可以指定key對應的value的類型。
  • 不必為默認值擔心,換句話說就是不必擔心有key沒有value這回事。總會有默認的value.

示例

defaultdict_eg

 

輸出:

defaultdict_result


 

d = defaultdict(list),該語句創建一個defaultdict類型(你可以想象為dict類型),value的類型是list。通過對d_3的對比就能看到,defaultdict是可以直接就進行d[k]的操作,即使d此時還是一個空的字典。實際過程就是示例里d_2的處理過程。

 

總結

主要使用根據數據創建字典時。當你需要為一些數據生成字典,而且對值的類型進行限定的時候,考慮defaultdict。

namedtuple()

定義及作用

namedtuple是繼承自tuple的子類。namedtuple和tuple比,有更多更酷的特性。namedtuple創建一個和tuple類似的對象,而且對象擁有可以訪問的屬性。這對象更像帶有數據屬性的類,不過數據屬性是只讀的。

示例

namedtuple_eg

 

TPoint = namedtuple('TPoint', ['x', 'y']) 創建一個TPoint類型,而且帶有屬性x, y.

通過上面的示例,可以看出不僅可以通過p.x, p.y的方式訪問p的屬性,而且還可以使用for來進行遍歷。這些就和tuple是一樣的。

還可以通過設置參數來看namedtuple的全貌。

namedtuple_eg2

 

這里就顯示出了namedtuple的一些方法。很明顯的看到namedtuple是直接繼承自tuple的。

幾個重要的方法:

1.把數據變成namedtuple類:

namedtuple_eg3

>>>

2. 根據namedtuple創建的類生成的類示例,其數據是只讀的,如果要進行更新需要調用方法_replace.

namedtuple_eg4

 

3.將字典數據轉換成namedtuple類型。

namedtuple_eg5

 

namedtuple最常用還是出現在處理來csv或者數據庫返回的數據上。利用map()函數和namedtuple建立類型的_make()方法。

namedtuple_eg6


 

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM