python中collections常用模块总结


collections的常用类型有:

  • 计数器(Counter)
  • 默认字典(defaultdict)
  • 有序字典(OrderedDict)
  • 双向队列(deque)
  • 可命名元组(namedtuple)

下面我们来一一介绍。

1. 计数器-Counter

Counter 作为字典(dict)的一个子类用来进行哈希计数,将元素进行数量统计、计数后返回一个字典:键值为元素,值为元素个数

1.1 创建Counter

from collections import Counter

s = 'abcbcaccbbad'
l = ['a','b','c','c','a','b','b']
d = {'2': 3, '3': 2, '17': 2}
# Counter 获取各元素的个数,返回字典
print(Counter(s))   # Counter({'c': 4, 'b': 4, 'a': 3})
print(type(Counter(s))) #<class 'collections.Counter'>
print(Counter(l))   # Counter({'b': 3, 'a': 2, 'c': 2})
print(Counter(d))   # Counter({3: 3, 2: 2, 17: 1})

输出:

Counter({'b': 4, 'c': 4, 'a': 3, 'd': 1})
<class 'collections.Counter'>
Counter({'b': 3, 'a': 2, 'c': 2})
Counter({'2': 3, '3': 2, '17': 2})

1.2 次数排序-most_common

按照元素出现的次数由高到低进行排序,并返回一个list

from collections import Counter

s = 'abcbcaccbbad'
s_counter = Counter(s)

print(s_counter)
print(s_counter.most_common(3))

输出:

Counter({'b': 4, 'c': 4, 'a': 3, 'd': 1})
[('b', 4), ('c', 4), ('a', 3)]

1.3 返回经过排序的key-elements

elements 返回经过计数器Counter后的元素,返回的是一个迭代器

from collections import Counter

s = 'abcbcaccbbad'

s_counter = Counter(s)

for i in s_counter.elements(): #或者可以转化为list
    print(i)

输出:

a
a
a
b
b
b
b
c
c
c
c
d

1.4 加法更新-update

从一个集合中增加元素

from collections import Counter

s = 'abcbcaccbbad'

s_counter = Counter(s)
print(s_counter)
# 方法1:
s_counter.update('ef')
#方法2: 
# s_counter.update(Counter('ef'))
print(s_counter)

输出:

Counter({'b': 4, 'c': 4, 'a': 3, 'd': 1})
Counter({'b': 4, 'c': 4, 'a': 3, 'd': 1, 'e': 1, 'f': 1})

1.5 减法操作-substract

从一个集合中删除元素

from collections import Counter

s = 'abcbcaccbbad'

s_counter = Counter(s)
print(s_counter)
# 方法1:
s_counter.subtract('ae') #原始数据中没有e,所以它为-1
#方法2: 
# s_counter.subtract(Counter('ae'))
print(s_counter)

输出:

Counter({'b': 4, 'c': 4, 'a': 3, 'd': 1})
Counter({'b': 4, 'c': 4, 'a': 2, 'd': 1, 'e': -1})

1.6 迭代访问

items、keys和values与普通字典一样。

from collections import Counter

s = 'abcbcaccbbad'

s_counter = Counter(s)
print(s_counter)

for i in s_counter.items():
    print(i)

输出:

Counter({'b': 4, 'c': 4, 'a': 3, 'd': 1})
('a', 3)
('b', 4)
('c', 4)
('d', 1)

2. 双端队列-deque

deque可以从两端添加和删除元素,是collenctions中常用的模块,它的操作如下图所示:
在这里插入图片描述

from collections import deque

str1 = 'abc123cd'
dq = deque(str1)
print(dq)

print('==================元素访问操作================')
print(dq[2])

print('==================增加元素================')
dq.append('right') #右边
dq.appendleft('left')
dq.extend(['ext', 'end']) #右边添加多个
print(dq)

print('==================pop元素================')
dq.pop() #右边pop
dq.popleft() #左边pop
print('a' in dq)

print('==================in操作================')
print('a' in dq)

print('==================插入操作================')
dq.insert(3, "insert")
print(dq)

print('==================删除操作================')
dq.remove('c') #删除第一个元素'c
print(dq)

print('==================旋转操作================')
dq.rotate() #把右边的一个元素放到最左边
print(dq)

输出:

deque(['a', 'b', 'c', '1', '2', '3', 'c', 'd'])
==================元素访问操作================
c
==================增加元素================
deque(['left', 'a', 'b', 'c', '1', '2', '3', 'c', 'd', 'right', 'ext', 'end'])
==================pop元素================
True
==================in操作================
True
==================插入操作================
deque(['a', 'b', 'c', 'insert', '1', '2', '3', 'c', 'd', 'right', 'ext'])
==================删除操作================
deque(['a', 'b', 'insert', '1', '2', '3', 'c', 'd', 'right', 'ext'])
==================旋转操作================
deque(['ext', 'a', 'b', 'insert', '1', '2', '3', 'c', 'd', 'right'])

3. 默认字典-defaultdict

传统字典类型,如果没有默认类型,是无法直接赋值的,如下代码就会报错!

b = dict()
b['k'].append('2') #需要先创建该字典==》b['k'] = 3

默认字典,是字典的一个子类,继承有字典的方法和属性,默认字典在进行定义初始化的时候可以指定字典值得默认类型。

from collections import defaultdict

dic = defaultdict(list)
dic['k'].append('3')
dic['k'].append('4')
print(dic)

输出:

defaultdict(<class 'list'>, {'k': ['3', '4']})

4. 有序字典-OrderedDict

原始字典是无序的,而OrderDict 是一个有序字典,也是字典类型(dict)的一个子类,是对字典的一个补充。

from collections import OrderedDict

# 定义有序字典
dic2 = OrderedDict()
dic2['a'] = '1'
dic2['b'] = '2'
dic2['c'] = '3'
dic2['d'] = '4'
for k, v in dic2.items():
    print('有序字典:%s:%s' %(k,v))

输出:

有序字典:a:1
有序字典:b:2
有序字典:c:3
有序字典:d:4

5. 可命名元组-namedtuple

namedtuple是继承自tuple的子类,namedtuple会创建一个和tuple类似的对象,而且它拥有可访问的属性

  • 定义namedtuple类型

定义一个namedtuple类型User,并包含name,sex和age属性。

User = namedtuple('User', ['name', 'sex', 'age'])
  • 创建对象
# 方法一:
user = User(name='kongxx', sex='male', age=21)

#方法二:
user = User._make(['kongxx', 'male', 21])
  • 代码示例
from collections import namedtuple

# 定义一个namedtuple类型User,并包含name,sex和age属性。
User = namedtuple('User', ['name', 'sex', 'age'])

user = User(name='qlee', sex='male', age=21)

print(user)
print(user.name)
#修改对象属性
user = user._replace(age=30)

print(user)

# 将User对象转换为字典
user = user._asdict()
print(user)

输出:

User(name='qlee', sex='male', age=21)
qlee
User(name='qlee', sex='male', age=30)
{'name': 'qlee', 'sex': 'male', 'age': 30}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非晚非晚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值