返回顶部
首页 > 资讯 > 后端开发 > Python >3 - collections 模块
  • 605
分享到

3 - collections 模块

模块collections 2023-01-31 08:01:01 605人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

collections 数据类型主要是为了弥补 list /tuple / dict 的额外数据类型 ChainMap 代码: import collections ## 赋值,合并字典的作用 a = {'a':"A"} b = {"b

collections 数据类型主要是为了弥补 list /tuple / dict 的额外数据类型

ChainMap

代码:

import collections
## 赋值,合并字典的作用
a = {'a':"A"}
b = {"b":"B"}

m = collections.ChainMap(a,b)
for k,v in m.items():
    print('key: {} | value:{}'.fORMat(k,v))

print(m)

如果字典中有重复的key值

a = {"a":"A","b":"B"}
b = {"b":"C"}
m2 = collections.ChainMap(a,b)
print(m2)

for k,v in m2.items():
    print('key: {} | value:{}'.format(k,v))

输出:

ChainMap({'a': 'A', 'b': 'B'}, {'b': 'C'})
key: a | value:A
key: b | value:B

结论:
结果是没有合并,如果只是合并字典的值,还是直接使用update即可, 这个模块不怎么会用到,了解即可

Counter

Counter 顾名思义,就是计算总数的意思,可以计算出一个序列中每个元素的个数,一个简单的例子

>>> import collections
>>> collections.Counter("Hello World")
Counter({'l': 3, 'o': 2, 'H': 1, 'e': 1, ' ': 1, 'W': 1, 'r': 1, 'd': 1})

可以使用如下的写法,来得到自己想要的元素的个数

>>> a =  collections.Counter("Hello World")
>>> a['W']
1

除此之外,Counter对象还支持直接运算

import collections

c1 = collections.Counter("Hello World")
c2 = collections.Counter("Hello python")

print("c1 + c2 =",c1 + c2)
print("c1 - c2 = ",c1 - c2)
print("c1 | c2 = ",c1 | c2)
print("c1 & c2 = ",c1 & c2)

输出:

c1 + c2 = Counter({'l': 5, 'o': 4, 'H': 2, 'e': 2, ' ': 2, 'W': 1, 'r': 1, 'd': 1, 'P': 1, 'y': 1, 't': 1, 'h': 1, 'n': 1})
c1 - c2 =  Counter({'l': 1, 'W': 1, 'r': 1, 'd': 1})
c1 | c2 =  Counter({'l': 3, 'o': 2, 'H': 1, 'e': 1, ' ': 1, 'W': 1, 'r': 1, 'd': 1, 'P': 1, 'y': 1, 't': 1, 'h': 1, 'n': 1})
c1 & c2 =  Counter({'l': 2, 'o': 2, 'H': 1, 'e': 1, ' ': 1})

defaultdict

众所周知,当需要获取一个字典的值,可以使用 xx[key] 这样的形式去获取,如果key值不存在,那么就会抛出一个错误,所以大部分推荐的做法是,使用 get 方法来获取字典的值,比如:

test = {"a":"b"}
test.get("a")
# 如果获取一个不存在的 key 值
test.get("b") # 返回None
# 但是通过get 可以指定一个 key 值
test.get("b","this is b") # 返回 this is b

defaultdict 也差不多是这样的道理,当你获取一个不存在的 key 值的时候,返回默认值

import collections

def default_value():
    return "Default value"


m = collections.defaultdict(default_value,foo='aaa')
print(m['fxx']) # 返回 Default value

deque

双端队列,元素可以从两端弹出,插入和删除操作限定在队列的两边进行

from collections import deque
d = deque("abcdefg")
print(d) # deque(['a', 'b', 'c', 'd', 'e', 'f', 'g'])
d.remove('c')
print(d) # deque(['a', 'b', 'd', 'e', 'f', 'g'])
d.append('h')
print(d) #deque(['a', 'b', 'd', 'e', 'f', 'g', 'h'])
d.appendleft("1")
print(d) #deque(['1', 'a', 'b', 'd', 'e', 'f', 'g', 'h'])
# 使用pop 获取队列中的值
d.pop()
print(d) # deque(['1', 'a', 'b', 'd', 'e', 'f', 'g'])
d.popleft()
print(d) # deque(['a', 'b', 'd', 'e', 'f', 'g'])

也可以使用线程来消费双端队列

from collections import deque
import time
import threading


# deque 也可以用线程通信
d1 = deque(range(1000))
def task(direction,i,nextSource):
    while True:
        try:
            item = nextSource()
            print("方向:{} 线程: {} 正在处理: {} ".format(direction,i,item))
        except IndexError as e:
            break
        else:
            time.sleep(1)
    

right_ts = [threading.Thread(target=task,args=('right',i,d1.pop))for i in range(10)]
left_ts = [threading.Thread(target=task,args=('left',i,d1.popleft)) for i in range(10)]

for tl in left_ts:
    tl.start()

for tr in right_ts:
    tr.start()

for tl in left_ts:
    tl.join()

for tr in right_ts:
    tr.join()

OrderedDict

使用字典的时候,其输出时,不一定按照当时添加的顺序输出,例如:

d = {}
d['a']= 'A'
d['b'] = 3
d['c']= 1
d['d']='B'
d['c']='C'
for k,v in d.items():
    print(k,'=>',v)

输出:

a => A
b => 3
c => C
d => B

但是 OrderedDict 会

d = OrderedDict()
d['a']= 'A'
d['b'] = 3
d['s']= 1
d['d']='B'
d['c']='C'
for k,v in d.items():
    print(k,'=>',v)

输出:

a => A
b => 3
s => 1
d => B
c => C

当需要使用dict 来作为运算和存储的时候,这就是一个比较有用的特点了。

以上这些在日常使用的时候如果不了解,很少会去用到,但如果想写出优雅,简洁的代码,这些概念会起到一定的帮助作用

《The python3 Standard Library By Example》

--结束END--

本文标题: 3 - collections 模块

本文链接: https://lsjlt.com/news/192969.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 3 - collections 模块
    collections 数据类型主要是为了弥补 list /tuple / dict 的额外数据类型 ChainMap 代码: import collections ## 赋值,合并字典的作用 a = {'a':"A"} b = {"b...
    99+
    2023-01-31
    模块 collections
  • collections模块
      collections模块在内置数据类型(dict、list、set、tuple)的基础上,还提供了几个额外的数据类型:ChainMap、Counter、deque、defaultdict、namedtuple和OrderedDict...
    99+
    2023-01-30
    模块 collections
  • python模块之collections
    计数器 Counter 计数元素迭代器 elements() 计数对象拷贝 copy() 计数对象清空 clear() from collections import Counter #import collection...
    99+
    2023-01-30
    模块 python collections
  • 集合模块collections
    collections是Python内建的一个集合模块,提供了许多有用的集合类。 namedtuple 我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: >>> p = (1, 2) 但是,看到...
    99+
    2023-01-31
    模块 collections
  • 25 Python的collections模块
    概述         在上一节,我们介绍了Python的sqlite3模块,包括:sqlite3模块中一些常用的函数和类。在这一节,我们将介绍Python的collections模块。collections模块是Python中的内置模块,它...
    99+
    2023-10-19
    python collections模块
  • python3--模块configparser,logging,collections
    configparser模块该模块适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)创建文件import configparserconfig = configpar...
    99+
    2023-01-30
    模块 configparser collections
  • python中的deque模块(collections的deque模块)
    目录 1. deque是python的collections中的一个类 2.deque的简单使用以及它的方法 2.1 创建deque的方法  2.2 创建deque时,并指定大小maxlen,即能装几个元素, 以及d...
    99+
    2023-09-25
    python 开发语言 collections deque 队列
  • python3--模块collections,time,random,sys
    defaultdict(默认字典)有如下值集合[11,22,33,44,55,66,77,88,99,90......],将所有大于66的值保存至字典的第一个key中,小于66的值保存至第二个key的值中即:{'k1':大于...
    99+
    2023-01-30
    模块 collections sys
  • 必须知道的collections模块
    先来看一下collections模块中的方法: __all__ = ['deque', 'defaultdict', 'namedtuple', 'UserDict', 'UserList', 'UserStrin...
    99+
    2023-01-31
    模块 collections
  • Python collections模块的使用技巧
    一般来讲,python的collections是用于存储数据集合(比如列表list, 字典dict, 元组tuple和集合set)的容器。这些容器内置在Python中,可以直接使用。该collections模块提供了...
    99+
    2022-06-02
    Python collections模块 Python collections的使用
  • Python中 Collections 模块如何使用
    今天就跟大家聊聊有关Python中 Collections 模块如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。collections模块是一个不用不知道,一用就上瘾的模块。这...
    99+
    2023-06-15
  • collections模块如何在Python中使用
    这期内容当中小编将会给大家带来有关collections模块如何在Python中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数据...
    99+
    2023-06-14
  • Python内置模块Collections如何使用
    本篇内容主要讲解“Python内置模块Collections如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python内置模块Collections如何使用”吧!1、模块说明collec...
    99+
    2023-06-29
  • 聊聊Python的一个内置模块Collections
    1、模块说明collections 是 Python 的一个内置模块,所谓内置模块的意思是指 Python 内部封装好的模块,无需安装即可直接使用。collections 包含了一些特殊的容器,针对 Python 内置的容器,例如:list...
    99+
    2023-05-14
    Python 函数 内置模块
  • 常用模块3
      一.正则表达式   英文全称: Regular Expression. 简称 regex或者re.正则表达式是对字符串操作的一种逻辑公式. 我们一般使用正则表达式对字符串进行匹配和过滤. 使用正则的优缺点:   优点: 灵活, 功能性...
    99+
    2023-01-30
    模块 常用
  • Python的collections模块中的OrderedDict有序字典
    如同这个数据结构的名称所说的那样,它记录了每个键值对添加的顺序。 d = OrderedDict() d['a'] = 1 d['b'] = 10 d['c'] = 8 for letter in d:...
    99+
    2022-06-04
    字典 模块 Python
  • 如何在Python项目中使用collections模块
    这篇文章主要介绍了如何在Python项目中使用collections模块,编程网小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随编程网小编来看看吧!Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;...
    99+
    2023-06-06
  • python 3 的selenium模块
    基于python 3 的selenium模块实现网页自动登陆 ----http://blog.csdn.net/u010637662/article/details/53612197[Python爬虫] Selenium实现自动登录163邮...
    99+
    2023-01-31
    模块 python selenium
  • Python的collections模块中namedtuple结构使用示例
    namedtuple 就是命名的 tuple,比较像 C 语言中 struct。一般情况下的 tuple 是 (item1, item2, item3,...),所有的 item 都只能按照 index 访...
    99+
    2022-06-04
    示例 模块 结构
  • Python内置模块Collections的使用教程详解
    目录1、模块说明2、 实战代码(1) testNamedTuple函数(2) testDeque函数(3)testDefaultdict函数(4) testOrderedDict函数...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作