一、collections.defaultdict:多值映射字典
defaultdict省去了初始化容器的过程,会默认value对象为指定类型的容器
指定list时可以使用.append,
from collections import defaultdict d = defaultdict(list) d['a'].append(1) d
defaultdict(list, {'a': [1]})
指定set时可以使用.add,
d = defaultdict(set) d['a'].add(1) d['a'].add(1) d
defaultdict(set, {'a': {1}})
原字典可以使用.setdefault方法指定value为容器,但是不太推荐,如下,
d = {} d.setdefault('a', []).append(1) d.setdefault('a', []).append(2) d.setdefault('b', []).append(3) d.setdefault('c', {1,2,3}) #默认的dict对象没有add方法,非使用append也不行 # 由于默认的方法中每次添加新的元素都要创建新的空对象[],所以不推荐 d
{'a': [1, 2], 'b': [3], 'c': {1, 2, 3}}
顺便,字典的内容是key值,
'a' in d # 字典in的是key
True
二、collections.OrderedDict:含序字典
OrderedDict内部维护着一个双向链表用于记录键值插入的顺序,更新键值不会影响原有顺序,插入键值会插入在末尾,所以其内存消耗为普通字典的两倍,
from collections import OrderedDict d = OrderedDict() d['a'] = 1 d['c'] = 3 d['b'] = 2 print(d, d.items())
OrderedDict([('a', 1), ('c', 3), ('b', 2)])
odict_items([('a', 1), ('c', 3), ('b', 2)])
含序字典实际上常和json连用,用于输出信息,
import json # 对字典进行编码,使用OrderdDict可以控制字段顺序 json.dumps(d)
'{"a": 1, "c": 3, "b": 2}'