Python標準庫defaultdict模組使用樣本

來源:互聯網
上載者:User
Python標準庫中collections對集合類型的資料結構進行了很多拓展操作,這些操作在我們使用集合的時候會帶來很多的便利,多看看很有好處。
defaultdict是其中一個方法,就是給字典value元素添加預設類型,之前看到過但是沒注意怎麼使用,今天特地瞅了瞅。

首先是各大文章介紹的第一個例子:

代碼如下:


import collections as coll

def default_factory():
return 'default value'

d = coll.defaultdict(default_factory, foo='bar')
print 'd:',d
print 'foo=>', d['foo']
print 'foo=>', d['bar'] #key為'bar'的元素不存在,會有一個預設值


輸出結果是這樣的:

代碼如下:


d: defaultdict(, {'foo': 'bar'})
foo=> bar
foo=> default value


結論:這裡可以看到,當我們取字典中一個沒有的key的時候就會自動根據 default_factory產生一個value,類似於 d.get('bar','default value')

一個對比的例子:
如果一個字典中有個map的value是一個set,往這個set連續添加兩個元素,使用原始的dict是這樣的

代碼如下:


dict_set1 = {}
#如果不知道這個欄位中key有沒有,需要先判斷
if 'key' not in dict_set1:
dict_set1['key'] = set()
dict_set1['key'].add('111')
dict_set1['key'].add('000')
print dict_set1


如果使用defaultdict就是這樣的

代碼如下:


dict_set = coll.defaultdict(set)
dict_set['key'].add('000')
dict_set['key'].add('111')
print dict_set

好處就是不需要做set的初始化這個判斷了。

兩個使用的小案例

代碼如下:


ss = '1111222233334444'
dict_int = coll.defaultdict(int)
for s in ss:
dict_int[s] += 1
print dict_int

'''''
官方文檔的這個例子就能看到這種寫法的簡潔了
https://docs.python.org/2/library/collections.html#collections.defaultdict
>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
... d[k].append(v)
...
>>> d.items()
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
'''


當我們做這種帶有統計性質的資料操作時候,這個對象很好用。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.