经典结构:
if key not in my_dict: my_dict[key] = some_type # [] | {} | number | str my_dict[key].process()
上面那种不是很美观, 引入defaultdict
defaultdict( lambda: x )
它接收一个func
, 没有参数 ,返回的就是key不存在时的默认值, 概念有点像
dict.get(key, default)
这种, key不存在, 返回默认值
如下例子, 不用判断默认值, 没有key的话, 拿到的就是默认的结构{'skeleton': set(), 'graphs': set()}
coding=utf-8 from collections import defaultdict model_dict = defaultdict(lambda: {'skeleton': set(), 'graphs': set()}) print model_dict[2]['skeleton'].add(3) print model_dict[2]['skeleton'] print model_dict[1]['skeleton'] # default_factory=None, key error时的返回值, 那么我们直接定义为lambda, 对应的返回对应的参数, 那么就不用判空了 if 2 not in model_dict: model_dict[2] = {'skeleton': set(), 'graphs': set()} else: model_dict[2]['skeleton'].add(1) # 上面的这种写法很普遍, 但是我们可以用defaultdict进行简化