两种方法:
dict.get(key , default=None)
dict.setdefault(key, default=None)
- 以上二者调用返回的结果完全相同,都是当dict中不含有该键时,返回后面你给的默认值;
- 但二者也有区别——get方法不会改变dict,而setdefault方法会在一次调用后向dict中添加这个之前不存在的键值对
请见代码:
dicts = {5:'Garnett',11:'Irving',0:'Tatum',7:'Brown',20:'Hayward'}
dicts.get(36,'Smart')
>>> 'Smart'
dicts
>>> {5: 'Garnett', 11: 'Irving', 0: 'Tatum', 7: 'Brown', 20: 'Hayward'} # dicts没有变化,我钢哥没被加进来
dicts.setdefault(42,'Horford')
>>> 'Horford'
dicts
>>> {5: 'Garnett',
11: 'Irving',
0: 'Tatum',
7: 'Brown',
20: 'Hayward',
42: 'Horford'}
# dicts被改变了,伙夫被加了进来
defaultdict
如上,在Python的collections模块中,有defaltdict容器,这个容器可以在该容器中不含有某个键的时候直接返回你默认设置的值
代码如下:
from collections import defaultdict
dict1 = defaultdict(lambda :'Rozier')
dict1[12]
>>> 'Rozier'
dict1[13]
>>> 'Rozier'
dict1
>>> defaultdict(<function __main__.<lambda>()>, {13: 'Rozier', 12: 'Rozier'})
如代码所示,defaultdict可以接收一个函数,这个函数专门用于对不存在于defaultdict中的key进行处理,得到初始化的value 。我们这里传入了最简单的一个函数,不论传入的key为何值,返回值均是“Rozier”(返回一个太子)。所以后面可见,不论传入的时12还是13,结果都会返回一个初始化的默认值‘Rozier’,而不会抛出异常。同时defaultdict中也存入了者两组键值对。