首页 > 其他分享 >关于 collection的基本使用

关于 collection的基本使用

时间:2024-09-24 21:16:03浏览次数:7  
标签:基本 demo list collection dict 关于 print collections order

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] += 1
    print(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()

标签:基本,demo,list,collection,dict,关于,print,collections,order
From: https://www.cnblogs.com/wykang/p/18430016

相关文章

  • 通信的基本概念以及串口和定时器使用
    一.数据传送的方式  串行通讯  速度慢,占用资源少,距离远  并行通讯  速度快,占用资源多二.通信方式  单工通讯    一个固定发送,一个固定接受  半双工通讯    对讲机  全双工通讯    电话三.数据同步方式  同步(有时钟......
  • 介绍pytorch的基本概念及应用场景
    PyTorch的基本概念PyTorch是一个基于Python的开源机器学习(深度学习)框架,由Facebook的人工智能研究院(FAIR)开发。它以其出色的灵活性和易用性在深度学习领域广受欢迎。PyTorch的基本概念主要包括以下几个方面:张量(Tensor):张量是PyTorch最基本的数据结构,类似于多维数组,用于存储......
  • Cache(高速缓冲存储器)的基本概念和原理
    目录一、Cache基本概述1.Cache :2.局部性原理二、Cache性能分析:一、Cache基本概述CPU的读取指令速度很快,主存的速度很慢,如果快速的CPU每一次都从主存读取数据,会被主存拖累,降低执行效率。Cache:解决主存和CPU速度不匹配问题 1.Cache :   Cache会将CPU经常访问......
  • SpringBoot集成JPA及基本使用
    参考地址: https://blog.csdn.net/JingAi_jia917/article/details/138159418前言在讲解SpringBoot集成JPA之前,先简单了解一下几个概念,JDBC、ORM、JPA以及SpringDataJPA。1.1JDBCJDBC(JavaDataBaseConnectivity),是java连接数据库操作的原生接口API,为开发者访问数据库提供标准......
  • 【自动驾驶】决策规划算法(一)决策规划仿真平台搭建 | Matlab + Prescan + Carsim 联合
    写在前面:......
  • 一文了解Sublime Text基本 使用教程
    SublimeText是一个非常受欢迎的跨平台源代码编辑器,以其高性能、轻量级和高度可定制性而闻名。下面是一些基本的使用技巧和配置方法,帮助你更高效地使用SublimeText:安装与基本设置安装:访问官方网站下载对应操作系统的版本。按照安装向导提示进行安装。基本设置:调整......
  • Git 简介和基本使用方法
    什么是Git?Git是一个分布式版本控制系统,由LinusTorvalds于2005年创建。它设计用于管理和跟踪文件的变更,适用于各种规模的项目,从个人项目到大型开源项目。Git可以记录每个文件的修改历史,并且能够轻松地在不同版本之间进行切换。它还支持多人协作开发,可以方便地合并不同开发者的......
  • kl散度,K近邻估计法(K-Nearest Neighbors, KNN)是一种基本的分类与回归方法,通常用于分类
     K近邻估计法(K-NearestNeighbors,KNN)是一种基本的分类与回归方法,通常用于分类任务。在Python中,你可以使用scikit-learn库来实现KNN算法。下面是一个简单的示例,展示如何使用scikit-learn来实现KNN分类器。首先,确保你已经安装了scikit-learn库。如果没有安装,可以通过运行pipinsta......
  • 【Java】JVM基本组成
    一、JDK、JRE、JVM        JDK:全称“JavaDevelopmentKit”Java开发工具包,提供javac编译器、jheap、jconsole等监控工具;        JRE:全称“JavaRuntimeEnvironment” Java运行环境,提供classLibrary核心类库+JVM;             ......
  • 关于UndeclaredThrowableException异常
    说明动态代理里面抛出sentinel的异常发现抛出的是UndeclaredThrowableException包装了一层导致专门处理流控异常的地方不能正常处理  异常类图jdk动态原理对异常的处理生成的字节码参考https://www.cnblogs.com/LQBlog/p/16397103.htmlpublicfinalvoidsayHello(S......