之前在使用字典的時候, 用的比較隨意, 只是簡單的使用dict.
然而這樣在使用不存在的key的時候發生KeyError這樣的一個報錯, 這時候就該defaultdict登場了.
如何使用defaultdict
可以這樣
1
2
|
from collections import defaultdict d1 = defaultdict( int ) |
或者這樣
1
2
|
import collections d1 = collections.defaultdict( int ) |
defaultdict與dict實例化字典類型的區別
使用defaultdict任何未定義的key都會默認返回一個根據method_factory參數不同的默認值, 而相同情況下dict()會返回KeyError.
比較下面代碼:
1
2
3
4
|
d1 = dict () d2 = defaultdict( list ) print (d1[ 'a' ]) print (d2[ 'a' ]) |
defaultdict的構造
python官方文檔中對defaultdict的定義如下:
1
|
class collections.defaultdict([default_factory[, ...]]) |
python官方文檔中對defaultdict的解釋如下:
1
2
|
defaultdic dict subclass that calls a factory function to supply missing values |
default_factory 接收一個工廠函數作為參數, 例如int str list set等.
defaultdict在dict的基礎上添加了一個missing(key)方法, 在調用一個不存的key的時候, defaultdict會調用__missing__, 返回一個根據default_factory參數的默認值, 所以不會返回Keyerror.
Example
Example 1
1
2
3
4
5
|
s = 'mississippi' d = defaultdict( int ) for k in s: d[k] + = 1 print (d) |
Example 2
1
2
3
4
5
6
|
s = [( 'red' , 1 ), ( 'blue' , 2 ), ( 'red' , 3 ), ( 'blue' , 4 ), ( 'red' , 1 ), ( 'blue' , 4 )] d = defaultdict( set ) for k, v in s: d[k].add(v) print (d) |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。