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())