- python的collections是用于存储数据集合(比如列表list, 字典dict, 元组tuple和集合set)的容器。
- 这些容器内置在Python中,可以直接使用。
- collections模块提供了额外的,高性能的数据类型,可以增强你的代码,使事情变得更清洁,更容易。
Python官方文档对defaultdic的定义
dict subclass that calls a factory function to supply missing values
关于defaultdict:
defaultdict接受一个工厂函数作为参数
dict =defaultdict( factory_function)
二、其中这个factory_function,可以是list、set、str等等,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0
三、当时有dict时候,若key不存在会报错KeyError,所以可以使用defaultdict
from collections import defaultdict
d1 = dict()
d2 = defaultdict(list)
print(d2['a'])
print(d1['a'])
四、示例:
from collections import defaultdict
dict1 = defaultdict(int)
dict2 = defaultdict(set)
dict3 = defaultdict(str)
dict4 = defaultdict(list)
dict5 = defaultdict(dict)
print(dict1)
print(dict1[1])
print(dict2)
print(dict2[1])
print(dict3)
print(dict3[1])
print(dict4)
print(dict4[1])
print(dict5)
print(dict5[1])
关于Counter:
Counter()是字典对象的子类。Counter()可接收一个可迭代遍历的对象(例如字符串、列表或元组)作为参数,并返回计数器字典。字典的键将是可遍历对象中的唯一元素,每个键的值将是可迭代对象中的每个唯一元素对应的计数。
from collections import Counter
lst = [1, 2, 3, 3, 2, 1, 1, 1, 2, 2, 3, 1, 2, 3 ,4,]
counter = Counter(lst)
print(counter)
# 使用print 它看起来像个字典,如下所示:
输出:
Counter({1: 5, 2: 5, 3: 4, 4: 1})
可以使用键值key访问任何计数器条目,这与从标准Python字典中提取元素的方式完全相同。
print('1',counter[1])
输出:
1 5 # 1的数量有5个
关于most_common:
每个元组的第一个元素是列表中的唯一原始,每个元组的第二个元素是计数。这是一种快速简便的方法,实现比如“获取列表中最常见的3个元素及其计数”的功能。
它将返回N个最常见元素及其计数的列表,按从最常见到最不常见的顺序排列。
print(counter.most_common(2)) # 返回最常见两个元素及其计数
输出:
[(1, 5), (2, 5)]
关于OrderedDict:
在Python 3.5及以前之前版本,Python的字典dict是无序的。如果先键值A先插入字典,键值B后插入字典,但是当你打印字典的Keys列表时,你会发现B可能在A的前面。对于无序字典,每次打印字典时每次显示元素的顺序都不一样。如果你的Python版本较老,需要借助collections模块提供的OrderedDict实现有序字典。
OrderedDict类似于正常的字典,只是它记住了元素插入的顺序。当对有序的词字典上迭代时,返回元素的顺序是按第一次添加元素的顺序进行。当元素删除时,排好序的词典保持着排序的顺序;但是当新元素添加时,就会被添加到末尾。
import collections
dd = {'b': 3, 'a': 4, 'c': 1, 'd': 2}
# 按key排序
od_by_key = collections.OrderedDict(sorted(dd.items(), key=lambda t: t[0]))
print(od_by_key)
# 按照value排序
od_by_value = collections.OrderedDict(sorted(dd.items(), key=lambda t: t[1]))
print(od_by_value)
输出:
OrderedDict([('a', 4), ('b', 3), ('c', 1), ('d', 2)])
OrderedDict([('c', 1), ('d', 2), ('b', 3), ('a', 4)])