Python中关于collections模块的数据类型

  1. python的collections是用于存储数据集合(比如列表list, 字典dict, 元组tuple和集合set)的容器。
  2. 这些容器内置在Python中,可以直接使用。
  3. 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)])
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值