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

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

defaultdict()

定義以及做用

返回一個和dictionary相似的對象,和dict不一樣主要體如今2個方面:sql

  • 能夠指定key對應的value的類型。
  • 沒必要爲默認值擔憂,換句話說就是沒必要擔憂有key沒有value這回事。總會有默認的value.

示例

defaultdict_eg

 

輸出:shell

defaultdict_result


 

d = defaultdict(list),該語句建立一個defaultdict類型(你能夠想象爲dict類型),value的類型是list。經過對d_3的對比就能看到,defaultdict是能夠直接就進行d[k]的操做,即便d此時仍是一個空的字典。實際過程就是示例裏d_2的處理過程。數據庫

 

總結

主要使用根據數據建立字典時。當你須要爲一些數據生成字典,並且對值的類型進行限定的時候,考慮defaultdict。app

namedtuple()

定義及做用

namedtuple是繼承自tuple的子類。namedtuple和tuple比,有更多更酷的特性。namedtuple建立一個和tuple相似的對象,並且對象擁有能夠訪問的屬性。這對象更像帶有數據屬性的類,不過數據屬性是隻讀的。函數

示例

namedtuple_eg

 

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

經過上面的示例,能夠看出不只能夠經過p.x, p.y的方式訪問p的屬性,並且還可使用for來進行遍歷。這些就和tuple是同樣的。ui

還能夠經過設置參數來看namedtuple的全貌。this

namedtuple_eg2

 

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

幾個重要的方法:

1.把數據變成namedtuple類:

namedtuple_eg3

>>>

2. 根據namedtuple建立的類生成的類示例,其數據是隻讀的,若是要進行更新須要調用方法_replace.

namedtuple_eg4

 

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

namedtuple_eg5

 

namedtuple最經常使用仍是出如今處理來csv或者數據庫返回的數據上。利用map()函數和namedtuple創建類型的_make()方法。

namedtuple_eg6
相關文章
相關標籤/搜索