defaultdict省去了初始化容器的过程,会默认value对象为指定类型的容器html
指定list时能够使用.append,python
from collections import defaultdict d = defaultdict(list) d['a'].append(1) d
defaultdict(list, {'a': [1]}) json
指定set时能够使用.add,app
d = defaultdict(set) d['a'].add(1) d['a'].add(1) d
defaultdict(set, {'a': {1}})编码
原字典能够使用.setdefault方法指定value为容器,可是不太推荐,以下,htm
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值,blog
'a' in d # 字典in的是key
True 内存
OrderedDict内部维护着一个双向链表用于记录键值插入的顺序,更新键值不会影响原有顺序,插入键值会插入在末尾,因此其内存消耗为普通字典的两倍,it
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}'