关于 collection的基本使用

news/2024/9/24 21:14:51
import collections
import re
print('-'*130)
# ['ChainMap', 'Counter', 'OrderedDict', 'UserDict', 'UserList', 'UserString', 'defaultdict', 'deque', 'namedtuple']
# print(collections.__all__)# 常用方法
'''
namedtuple() : 创建一个命名元组子类的工厂函数
deque: 高效增删改双向列表,类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop)
ChainMap: 	为多个映射创建单一视图的类字典类型 (译者注:模仿作用域搜索)
Counter :   计数功能
OrderedDict : 有序词典,就是记住了插入顺序
defaultdict : 当字典查询时,为key不存在提供一个默认值。UserDict	将字典包裹起来使得创建字典的子类更容易
UserList	将列表对象包裹起来使得创建列表的子类更容易
UserString	将字符串对象包裹起来使得创建字符串的子类更容易
'''def counter_demo():'''一个计数器工具提供快速和方便的计数,Counter是一个dict的子类,用于计数可哈希对象。它是一个集合,元素像字典键(key)一样存储,它们的计数存储为值。'''# 计算top10的单词text = "remove an existing key one level down remove an existing key one level down remove"words = re.findall(r'\w+',text)res = collections.Counter(words)print(res.items())print(res.most_common(10))# 计算列表中个数word_list = ['red', 'blue', 'red', 'green', 'blue', 'blue']res = collections.Counter(word_list)print(res)def deque_demo():'''双端队列,可以快速的从另外一侧追加和推出对象,deque是一个双向链表,针对list连续的数据结构插入和删除进行优化。'''ss = 'abc'd = collections.deque(ss)d.append('e') # 在右端追加print(d)d.appendleft('f') # 在左端追加print(d)d.pop() # 右端删除print(d)d.popleft() # 左端删除print(d)d_2 = collections.deque(maxlen=10) # 定义尺寸d_2.extend([i for i in range(0,100)])print(d_2)def odered_dict_demo():'''有序词典就像常规词典一样,但有一些与排序操作相关的额外功能,popitem() 方法有不同的签名。它接受一个可选参数来指定弹出哪个元素。move_to_end() 方法,可以有效地将元素移动到任一端。'''order_dict = collections.OrderedDict.fromkeys('abcdef')print(order_dict)order_dict.popitem() # last 默认为真,后进先出print(order_dict)order_dict.popitem(last=False)  # last 为假 ,先进先出print(order_dict)order_dict.move_to_end('c')print(order_dict)order_dict_to_list = list(reversed(order_dict))print(order_dict_to_list)def named_tuple_demo():'''生成可以使用名字来访问元素内容的tuple子类,命名元组赋予每个位置一个含义,提供可读性和自文档性。它们可以用于任何普通元组,并添加了通过名字获取值的能力,通过索引值也是可以的。'''Fish = collections.namedtuple('Fish',['name','species','tank'])sammy = Fish('Sammy','Shark','Tank-a')print(sammy)print(sammy.name,sammy.species,sammy.tank,sep='\n') # 通过key取值print('-'*130)print(sammy[0],sammy[1],sammy[2],sep='\n') # 通过索引取值t = [14,55,88]Point = collections.namedtuple('Point',['x','y','z'])Point._make(t) # 从存在的实例中转换print(Point)print(sammy._asdict) # 可以转换为字典p = Point(x=1,y=2,z=3)p._replace(x=1,y=22,z=333) # 替换值print(p)print(p._fields) # 字段名Account = collections.namedtuple('Account', ['type', 'balance'], defaults=[0])print(Account._field_defaults) # 字典将字段名称映射到默认值def default_dict_demo():'''使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict。defaultdict是内置dict类的子类。它重载了一个方法并添加了一个可写的实例变量'''tuple_list  = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]d = collections.defaultdict(list)for k,v in tuple_list:d.setdefault(k, []).append(v)print(sorted(d.items()))s = 'mississippi'd = collections.defaultdict(int)for k in s:d[k] += 1print(sorted(d.items()))s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]d = defaultdict(set)for k, v in s:d[k].add(v)print(sorted(d.items()))def chain_map_demo():'''ChainMap是由Python标准库提供的一种数据结构,允许你将多个字典视为一个。换句话说:ChainMap是一个基于多dict的可更新的视图,它的行为就像一个普通的dict。'''baseline = {'music': 'bach', 'art': 'rembrandt'}adjustments = {'art': 'van gogh', 'opera': 'carmen'}res = collections.ChainMap(adjustments, baseline)print(res)#存在重复元素时,也不会去重dcic1 = {'label1': '11', 'label2': '22'}dcic2 = {'label2': '22', 'label3': '33'}dcic3 = {'label4': '44', 'label5': '55'}last  = collections.ChainMap(dcic1, dcic2,dcic3)print(last)  # 返回一个新的key - value last.new_child(m={'key_new':888})print(last)if __name__ == '__main__':pass# func()# counter_demo()# deque_demo()  # odereddict_demo()# named_tuple_demo()# default_dict_demo()chain_map_demo()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/64334.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

redis内容记录

redis的基本数据类型String:是最基本的数据类型,它可以存储任何二进制安全的数据。 不仅能存放文本数据,还能保存图片、音频、视频、压缩文件等二进制数据。它们通常用于缓存。 Hash:哈希类型,其中键值对中的值本身又是一个键值对结构,hash 特别适合用于存储对象。 List:…

人工智能教育技术学第四周

1.用亿图图示制作黄山奇石语文课文的思维导图2.CAJViewer9.2(CAJ全文浏览器)是中国知网的专用全文格式阅读器,CAJ浏览器支持中国期刊网的CAJ、PDF、KDH等多种格式文件阅读。并且它的打印效果与原版的效果一致。可实现页面设置、浏览页面、查找文字、切换显示语言、文本摘录、…

项目实战:Qt+OSG爆破动力学仿真三维引擎测试工具v1.1.0(加载.K模型,子弹轨迹模拟动画,支持windows、linux、国产麒麟系统)

需求1.使用osg三维引擎进行动力学模型仿真性能测试;  2.打开动力学仿真模型文件,.k后缀的模型文件,测试加载解析过程;  3.解决第三方company的opengl制作的三维引擎,绘制面较多与弹丸路径模拟较卡顿的问题;  4.测试时,使用的模型为公开模型,基础面数量达到160多万…

【入门岛第1关】linux 基础知识

目录闯关任务 完成SSH连接与端口映射并运行hello_world.py 闯关任务 完成SSH连接与端口映射并运行hello_world.py 1 在远程主机上建立hello_python.py程序并运行,查看程序运行的端口: import socket import re import gradio as gr# 获取主机名 def get_hostname():hostname …

DOTS计算Voronoi图形生成,根据点自动划分区域生成多边形

如图,生成Voronoi图形,代码如下。using UnityEngine; using Unity.Mathematics; using Unity.Jobs; using Unity.Collections; using Unity.Profiling;[ExecuteInEditMode] public class VoronoiTextureBurstJobComponent : MonoBehaviour {[SerializeField][Min(1)] uint _s…

Vue2+3基础

。第一个Vue程序 使用script进行Vue全局设置: 指定Vue实例挂载的位置 , Vue和js一样,都需要在script里写 第一步创建vue实例 1.为什么要new vue(),直接调用Vue不行吗?不行,因为如果直接调用Vue()会报如下错误: 2.关于vue构造函数:optionsoptions翻译为多个选项 Vue…

任务4:制作二维码

该二维码链接到游戏“植物大战僵尸”,寓教于乐。 提升趣味性和互动性的同时,学生们参与到课堂当中,发挥主体作用,感受到自然界植物的多样性,对土壤的作用有了更深刻的理解。

封装的练习题目1

1.使用面向对象的思想,编写自定义描述狗的信息。设定属性包括:品种,年龄,心 情,名字;方法包括:叫,跑。 要求: 1)设置属性的私有访问权限,通过公有的 get,set 方法实现对属性的访问 2)限定心情只能有“心情好”和“心情不好”两种情况,如果无效输入进行提示, 默认…