ChainMap
可以将多个字典快速的连接起来,class collections.ChainMap(*maps)中,如果maps没有被指定,则默认创建一个空字典
new_child() :创建新的chainmap类,后面跟随当前实例的全部映射(map);
dd = collections.ChainMap({'a': 1})
ddd = dd.new_child(a)
dddd = ddd.new_child()
print(dddd) #ChainMap({}, {'a': 1, 'b': 2}, {'a': 1})
parents:返回一个新的ChainMap包含当前所以实例映射,除去第一个。
dd = collections.ChainMap({'a': 1})
ddd = dd.new_child(a)
dddd = ddd.new_child()
print(dddd) #ChainMap({}, {'a': 1, 'b': 2}, {'a': 1})
print(dddd.parents) #ChainMap({'a': 1, 'b': 2}, {'a': 1})
maps:根据索引返回对应chainmap实例
dd = collections.ChainMap({'a': 1})
ddd = dd.new_child(a)
dddd = ddd.new_child()
print(dddd)
print(dddd.parents) #ChainMap({'a': 1, 'b': 2}, {'a': 1})
print(dddd.maps[0]) #{'a': 1}
Counter
用于计数可哈希对象,想字典键一样存储。
gg = {'e': 5, 'f': 6}
g = Counter(gg.keys())
ggg = Counter(cats=4, dogs=5)
print(g) #Counter({'e': 1, 'f': 1})
print(ggg) #Counter({'dogs': 5, 'cats': 4})
elements():返回一个迭代器,每个元素重复出现的个数
ggg = Counter(cats=1, dogs=5)
gggg = sorted(ggg.elements())
print(gggg) #['cats', 'dogs', 'dogs', 'dogs', 'dogs', 'dogs']
most_common([n]):返回n个频率最高的元素和计数
ggg = Counter(cats=1, dogs=5)
print(Counter(ggg).most_common(1)) #[('dogs', 5)]
defaultdict
是内置dict类的子类 class collections.defaultdict([default_factory])中,default_factory默认为None,
default_factory可以有很多类型,list、set、str、int等等
1.将list作为default_factory,可将键-值对组成的序列变成键-列表组成的字典。
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4)]
d = collections.defaultdict(list)
print(d)
for k, v in s:
d[k].append(v)
print(sorted(d.items())) #[('blue', [2, 4]), ('yellow', [1, 3])]
2.lambda函数可灵活的指定任意默认值
strings = 'chinese'
counts = collections.defaultdict(lambda: 1)
for i in strings:
counts[i] += 1
print(counts) #defaultdict(<function <lambda> at 0x0000023CC9149F78>, {'c': 2, 'h': 2, 'i': 2, 'n': 2, 'e': 3, 's': 2})
OrderedDict
处理字典的重新排序
popitem(last=True):移除并返回一个键值对,last = True,则后进先出返回键值对,last = False,则先进先出返回键值对。
from collections import OrderedDict
d = OrderedDict.fromkeys('abcde')
print(dict(d)) #{'a': None, 'b': None, 'c': None, 'd': None, 'e': None}
d.popitem(last=False)
print(dict(d)) #{'b': None, 'c': None, 'd': None, 'e': None}
move_to_end(key, last=True):将现有key移动到有序字典的任一端,last = True,则移动到末尾,last = False,则移动到开头。
from collections import OrderedDict
d = OrderedDict.fromkeys('abcde')
d.move_to_end('b', last=False)
print(dict(d)) #{'b': None, 'a': None, 'c': None, 'd': None, 'e': None}
deque
返回一个新的双向队列对象
常用方法:
- append(x):添加x到右端
- appendleft(x):添加x到左端
- clear():移除所有元素,使其长度为0
- copy():浅复制
- count(x):计算队列中x的个数
- extend(iterable):扩展队列的右侧
- extendleft(iterable):扩展队列的左侧
- index(x):返回x在队列中的位置
- insert(i, x):在位置i插入x
- pop():移除右侧一个元素并返回
- popleft():移除左侧一个元素并返回
- remove(value):移除指定value
- reverse():将队列逆序排序