资讯专栏INFORMATION COLUMN

必须知道的collections模块

马永翠 / 2783人阅读

摘要:先来看一下模块中的方法本章我们只介绍除以外的方法,至于这三个方法,我们用于继承他们,而实现你想要的结构。

先来看一下collections模块中的方法:

__all__ = ["deque", "defaultdict", "namedtuple", "UserDict", "UserList",
            "UserString", "Counter", "OrderedDict", "ChainMap"]

本章我们只介绍除UserDict/UserList/UserString以外的方法,至于这三个方法,我们用于继承他们,而实现你想要的结构。
namedtuple:用于创建具有命名字段的tuple子类的工厂函数

#比如我们想构造一个纸牌类
Card=namedtuple("Card",[rank,suit])    #等同于namedtuple("Card",(rank,suit))
c1=Card("A","红桃")
c2=Card("K","黑桃")
print(c1.rank)    #A
print(c1.suit)    #红桃
print(c1.rank)    #B
print(c1.suit)    #黑桃
#改变对象的属性,可以使用 对象._replace(属性=值)方法更改已创建的对象的值
#_replace可以传入一个dict

deque:list-like容器,两端都有快速追加和弹出类,用于创建多个映射的单个视图(线程安全)

#其内部是一个单字母数组
a=deque("str")
a.appendleft("a")    #在头部插入数据
a.append("b")    #在尾部插入数据
a.count("a")    #查看字符出现的次数
a.insert(2,"y")    #根据索引插入值
a.clear()    #清空双端队列

defaultdict:多值字典

dict1=defaultdict(list/dict/set/lambda :"None")
dict1["a"].add(1)    #以set为例
print(dict1)    #defaultdict(, {"a": {1}})
print(dict1["b"])    #None,这就是lambda的作用

OrderedDict:保持元素被插入的顺序,结构是一个双向链表

#python3下dict默认也是有序的,但是方法有限
od=OrderedDict([("name","jim"),("age",19),("sex","男")])
od.setdefault("high",178)    #添加一组数据,或者使用od["high"]=178
od.move_to_end("name")    #将name组放置末尾

for i in od.items():
    print(i)    
#("name", "jim")
#("age", 19)
#("sex", "男")
#("high", 178)

Counter:计数器,在底层中为一个字典

c=Counter()    #可以直接Counter("测shishiyong"),这样就不用循环
for i in "测shishiyong":
    c[i]=c[i]+1
print(c)    
#Counter({"s": 2, "h": 2, "i": 2, "测": 1, "y": 1, "o": 1, "n": 1, "g": 1})
print(c.most_common(3))    #出现次数最多的三个元素
#[("s", 2), ("h", 2), ("i", 2)]
#c["元素"]  查看元素的出现次数
#c.update(list/str) 可以增加元素
#Counter可以使用+/-进行运算

ChainMap:合并多个字典

dict1={"name":"jim","age":21}
dict2={"high":175,"gender":"男"}

new_dict=ChainMap(dict1,dict2)
print(new_dict)    #ChainMap({"name": "jim", "age": 21}, {"high": 175, "gender": "男"})
#前dict中存在的键值对将会使后面dict中的键值对不会被重新合并,也可以使用update()方法对
#原字典更新新字典到里面,不过和直接合并的区别是,update会重新创建新字典,原字典更新删除
#数据不会影响新字典

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42807.html

相关文章

  • JavaScript 是如何工作模块构建以及对应打包工具

    摘要:挂机科了次使用这个结构,匿名函数就有了自己的执行环境或闭包,然后我们立即执行。注意,匿名函数的圆括号是必需的,因为以关键字开头的语句通常被认为是函数声明请记住,中不能使用未命名的函数声明。 这是专门探索 JavaScript 及其所构建的组件的系列文章的第 20 篇。 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! 如果你错过了前面的章节,可以在这里找到它们: ...

    hedzr 评论0 收藏0
  • Backbone.js学习笔记(一)

    摘要:它通过数据模型进行键值绑定及事件处理,通过模型集合器提供一套丰富的用于枚举功能,通过视图来进行事件处理及与现有的通过接口进行交互。 本人兼职前端付费技术顾问,如需帮助请加本人微信hawx1993或QQ345823102,非诚勿扰 1.为初学前端而不知道怎么做项目的你指导 2.指导并扎实你的JavaScript基础 3.帮你准备面试并提供相关指导性意见 4.为你的前端之路提供极具建设性的...

    FrancisSoung 评论0 收藏0
  • Backbone入门讲解

    摘要:一种解决问题的通用方法,我们叫做模式。事件委托当这个视图后,页面上的就会绑定事件,只要点击,就会执行方法。同时,页面上的元素也会绑定事件。,套入模板后变成,最后添加到页面上。 Backbone是一个实现了web前端mvc模式的js框架。 一种解决问题的通用方法,我们叫做模式。 设计模式:工厂模式,适配器模式,观察者模式等,推荐js设计模式这本书。设计模式是一种思想。 框架模式:MVC,...

    bingchen 评论0 收藏0
  • Python中collections模块使用

    摘要:这里提示一下,有些函数对队列进行操作,但返回值是,比如反转队列,将队列中元素向右移位,尾部的元素移到头部。比如字典中的键映射多个值输出结果如下三用途创建命名字段的元组。四用途统计可哈希的对象。 本文将详细讲解collections模块中的所有类,和每个类中的方法,从源码和性能的角度剖析。 一个模块主要用来干嘛,有哪些类可以使用,看__init__.py就知道 This module i...

    xorpay 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<