defaultdict
collections.defaultdict([default_factory[,...]])
第一个参数是default_factory,缺省是None,它提供一个初始化函数。
当key不存在的时候,会调用这个工厂函数来生成key对应的value
在有些场景下非常灵活,只需放一个函数名进来,可随意替换
举例来看(比较两段代码):
d1 = {}for k in 'abcde': for v in range(5): if k not in d1.keys(): d1[k] = [] d1[k].append(v)print(d1)
from collections import defaultdictd2 = defaultdict(list) #这里list,是一个类,函数也是对象;名称被拿走,其相对的内存地址也拿走了; list()带括号,是调用;for k in 'abcde': for v in range(3): d2[k].append(v)print(d2)
OrderedDict
collections.OrderedDict([items])
key并不是按照加入的顺序排列,可以使用OrderedDict记录顺序
有序字典可以记录元素插入的顺序,打印的时候也是按照这个顺序输出打印
3.6版本的python的字典就是记录key插入的顺序
from collections import OrderedDictimport randomd = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}print(d)keys = list(d.keys())random.shuffle(keys)od = OrderedDict()for key in keys: od[key] = d[key]print(od)print(od.keys())