有時訪問字典中的鍵時,鍵可能不存在,因此需要加檢查,如果發現沒有之後有時需要加默認值。
有一個一步到位的方法是利用collections包中的defaultdict,它創建的是會自動設置默認值的字典,如果鍵存在則返回鍵的值,鍵不存在則返回默認值並把該鍵值對加入字典。
defaultdict需要傳入的參數是一個函數,如果是int則初始值為0,如果是list則初始值為空列表,當然也可以傳入自定義的函數。
from collections import defaultdict
adict=defaultdict(int)
adict['a']=2
print(adict)
print(adict['b'])
print(adict)
bdict=defaultdict(lambda :'hhh')
print(bdict['c'])
輸出:
defaultdict(<class 'int'>, {
'a': 2})
0
defaultdict(<class 'int'>, {
'a': 2, 'b': 0})
hhh
可以發現,它和字典中的setdefault非常類似,但是它更節省空間,例如要設置默認值為空列表,setdefault的寫法是xxdict.setdefault(xxkey,[])
,無論xxkey是否存在,空列表都會創建,但是如果使用xxdict=defaultdict(list)
,則只有在鍵查不到的情況下才會創建空列表,因此更加節省空間。
defaultdict初始化時,還可以通過第二個參數傳入初始字典:
cdict=defaultdict(list,{
'c':'aaa'})
print(cdict)
輸出:
defaultdict(<class 'list'>, {
'c': 'aaa'})