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 defaultdict

d2 = 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 OrderedDict
import random

d = {'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())