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

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

原文地址:https://www.cnblogs.com/hellcat/p/8577101.html