描述
如果键在字典中,返回这个键所对应的值。如果键不在字典中,向字典中插入这个键,并且以default为这个键的值,并返回 default。default的默认值为None
语法
result = dict.setdefault(key, default=None)
- key: 查找的键值
- default: 键不存在时,设置的默认键值
- result: 键存在返回键值, 否则返回default
实例一, 理解setdefault
In [1]: kwargs = {'name': 'Lilei'}
In [2]: item = kwargs.setdefault('name', 'zhangsan')
#取到对应的键值 item-->Lilei
In [3]: item
Out[3]: 'Lilei'
In [4]: kwargs
Out[4]: {'name': 'Lilei'}
In [5]: new = kwargs.setdefault('info', {})
#没有对应的键 item-->default-->{}
In [6]: new
Out[6]: {}
In [7]: kwargs
Out[7]: {'info': {}, 'name': 'Lilei'}
#向字典中插入info,值为{}
In [8]: new.setdefault('score', '90')
Out[8]: '90'
In [9]: new
Out[9]: {'score': '90'}
#new对应的是kwargs中info的值{}, 然后给它赋值{'score': '90'}
In [10]: kwargs
Out[10]: {'info': {'score': '90'}, 'name': 'Lilei'}
实例二, 发散运用setdefault
info1 = '1.2.3.4.5'
info2 = 'a.b.c.d.f'
def transfer_kwargs(*args):
kwargs = {}
for arg in args:
k, v = map(lambda x: x.strip(), arg.split('.', 1))
if '.' in v:
item = kwargs.setdefault(k, {}) # step1
values = v.split('.')
for j in values[:-2]:
item = item.setdefault(j, {}) # step2
item[values[-2]] = values[-1] #step3
else:
kwargs.update({k: v})
print kwargs
transfer_kwargs(info1, info2)
{'1': {'2': {'3': {'4': '5'}}}, 'a': {'b': {'c': {'d': 'f'}}}}
跃迁图示
{'1': {}} --> {'1': {'2':{}}} --> {'1': {'2':{'3':{}}}} --> {'1': {'2':{'3':{'4':'5'}}}}
step1 --> step2 --> step2 --> step3
网友评论