Я не знал о defaultdict
, и это, наверное, лучший способ. если по какой-то причине вы против, я написал для этой цели небольшую функцию-обертку. Имеет немного другую функциональность, которая может быть лучше, а может и не быть лучше для вас.
def makeDictGet(d, defaultVal):
return lambda key: d[key] if key in dict else defaultVal
И используя это ...
>>> d1 = {'a':1,'b':2}
>>> d1Get = makeDictGet(d1, 0)
>>> d1Get('a')
1
>>> d1Get(5)
0
>>> d1['newAddition'] = 'justAddedThisOne' #changing dict after the fact is fine
>>> d1Get('newAddition')
'justAddedThisOne'
>>> del d1['a']
>>> d1Get('a')
0
>>> d1GetDefaultNone = makeDictGet(d1, None) #having more than one such function is fine
>>> print d1GetDefaultNone('notpresent')
None
>>> d1Get('notpresent')
0
>>> f = makeDictGet({'k1':'val1','pi':3.14,'e':2.718},False) #just put new dict as arg if youre ok with being unable to change it or access directly
>>> f('e')
2.718
>>> f('bad')
False