『Python CoolBook:Collections』数据结构和算法_容器型value字典&顺序字典

1、collections.defaultdict:多值映射字典

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 内存

 

2、collections.OrderedDict:含序字典

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}'