Python中内置了4 种数据类型,列表(List),元组(Tuple),集合(Set),字典(Dict)。这些数据类型都有其各自的特性,但是有些特性,比如字典无序,在一定程度上对数据类型的使用产生了约束,在某些场景下效率会比较低,Python collections 属于对这些基础数据类型的补充模块。由于Python collections属于内建模块,因此不需要安装。

接下来,我们介绍一下Python collections模块常用的四种方法。

defaultdict:字典的子类,提供了一个工厂函数,为字典查询提供一个默认值。

orderedDict:字典的子类,保存了他们被添加的顺序。

deque:类似列表(List)的容器,实现了在两端快速添加(append)和删除(pop)。

Counter:字典的子类,提供了可哈希对象的计数功能。

defaultdict

我们在Python中使用字典时,当字典的键(Key)不存在时,直接添加值(Value)时会出现KeyError错误,示例如下。

使用defaultdict可以优雅的规避该错误,defaultdict 是对字典类型的补充,它可以给字典的值设置一个默认数据类型,当字典的键(Key)不存在时,可以自动生成相应默认类型的值(Value),示例如下:

在如上例子中,我们可以看到,即使defaultdict对象不存在某个键(Key)时,它会自动创建一个空列表。另外,同样的功能使用 defaultdict 比使用 dict.setdefault 方法快。

orderedDict

在Python3.6 版本之前的字典是无序的,然而有些时候我们需要保持字典的有序性,跟踪到字典键(Key)添加先后顺序。orderedDict可以实现字典的有序性,即按照字典键(Key)插入的顺序来排列,这样就实现了一个先进先出的字典,当容量超出限制时,先删除最早添加的键(Key),示例如下:

我们需要注意的是,对于普通的字典,即使传入的顺序不一样,但是仍然是相同的字典;但如果是orderedDict,当传入的顺序不一样时,那么得到的字典是不一样的,示例如下:

deque

Python中的列表(List)是基于数组实现的,查找容易,但插入和删除操作时间复杂度较大。 deque实现了高效实现插入和删除操作的双向列表(也叫做双端队列),适合用于队列和栈,并且线程安全。

列表(List)只提供了append和pop方法,实现从列表(List)的尾部插入或删除元素。deque新增了appendleft、popleft 等方法可以更高效的在列表的开头插入或删除元素,示例如下:

Counter

Counter 属于字典的子类,主要作用是统计可哈希对象出现的次数。追踪元素出现的次数同时按照从高到低的顺序排列成字典,元素被作为字典的键(Key)存储,它们的计数作为字典的值(Value)存储,示例如下:

同时Counter内部提供了很多方法对结果进行处理,如most_common方法获取出现次数最多的前N个元素,如下:

python优雅编程_Python优雅编程——Collections模块中的高性能数据类型相关推荐

  1. Python的collections模块中namedtuple结构使用示例

    namedtuple顾名思义,就是名字+元组的数据结构,下面就来看一下Python的collections模块中namedtuple结构使用示例 namedtuple 就是命名的 tuple,比较像 ...

  2. python socket编程_Python Socket编程实现网络编程

    对于有经验的开发人员来说,掌握的编程语言应该是不少的.在这些编程语言中,网络编程的应用时必不可少的.其中Python也是这样的编程语言.我们今天将会在这里为大家详细介绍一下Python Socket编 ...

  3. 理解python并发编程_Python并发编程很简单

    上次已经和大家探讨了关于进程和线程的区别和联系相关的东东,今天呢,咱们再次回到 好啦,废话少说,咱们就开始吧! 首先说一下哦,_thread和threading哦,到这可能有朋友会问了,这两个有什么区 ...

  4. python 网络编程_Python网络编程(六)

    回顾 在<Python进阶记录之网络编程(五)>中,我们介绍了如何利用TCP服务端和客户端实现一个简单的点对点聊天,区别基于TCP协议和UDP协议的不同之处.今天我们讲一下如何利用多进程和 ...

  5. python完全支持面向对象编程_python面向对象编程----009

    本篇内容: 1.反射 2.面向对象编程 3.面向对象三大特性 4.类成员 5.类成员修饰符 6.类的特殊成员 7.单例模式 反射 python中的反射功能是由以下四个内置函数提供:hasattr.ge ...

  6. python 多进程并发_python并发编程之多进程

    一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.P ...

  7. python元编程_python元编程详解(3)

    今天转载一片非常精彩的文章供大家欣赏:参考文章链接. python开发者门户一个很好的学习python的网站,大家有时间可以多看看. 下面正式开始今天的内容: 在理解元类之前,你需要先掌握Python ...

  8. python高级属性 用法 编程_python高级编程之面向对象高级编程

    1 面向对象编程 面向对象这节比较简单,就稍微总结几个特殊的点. 特殊方法__init__前后分别有两个下划线,__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init ...

  9. python多进程编程_python并发编程中的多进程(代码实现)

    一.multipricessing模块的介绍 python中的多线程无法利用多核优势,如果想要充分的使用多核CPU资源,在python中大部分情况下需要用多线程,python提供了multiproce ...

最新文章

  1. linux ksh 历史命令,防止Linux中的bash(和ksh)历史记录更改
  2. ArrayList LinkedList与HashMap 实现原理
  3. 在datatable中,在指定位置插入列
  4. 超越JAX-RS规范:Apache CXF搜索扩展
  5. c语言中把一个数缩小十倍_C语言实例第04期,在控制台打印出著名的杨辉三角...
  6. 查看linux环境下cudnn是否安装,Linux下安装cuda和对应版本的cudnn
  7. MacOS的14个Spotlight搜索技巧
  8. 小白学习Python的一点建议
  9. 《JSP实用教程(第2版)/耿祥义》错误之tomcat虚拟服务目录
  10. blender基本翻译+快捷键
  11. Pr-快速上手-基本操作-教程
  12. latex编译报错:Font ntx-Regular- tlf-ot1r at 438 not found
  13. PYTHON对接语音验证码接口API
  14. 微信聊天记录如何恢复
  15. 14、Java——迷你图书管理器(对象+数组)
  16. Spring-Web - 数据库 字段加密 解密
  17. 十六足球队,随机分四组
  18. html 鼠标右键点击事件,js与jq的鼠标右键点击事件
  19. 【SEO新手教程】学会这8点,网站被搜索引擎(百度)降权再也不怕了
  20. html5小游戏源码-扫雷

热门文章

  1. SpringHttpInvoker解析2-服务端实现
  2. 无需SherlockActionbar的SlidingMenu使用详解(二)——向Fragment中添加ViewPager和Tab
  3. dropdownlist可以多选。类似的例子。。。
  4. arduino COM口被占用问题解决
  5. rsync软件配置和使用教程
  6. @90后程序员,“颜值即正义”的现在,程序员应该如何更新穿搭?
  7. weblogic各个版本对JDK和Spring的支持度
  8. P8U8 最中听的话,不要做每件事都考虑太多。
  9. 2013年,6月20日,今天非常无聊啊。
  10. 【转载】c++之类的基本操作(c++ primer 的读书笔记 ,类对象, 类用户, 类成员的含义)