1. namedtuple

假设有两个列表,如下,要判断两个列表中的某一个索引值是否相等。

In [7]: p = ['001', 'wohu', '100', 'Shaanxi']In [8]: t = ['002', 'tom', '20', 'Beijing']In [9]: p[0] == t[0]
Out[9]: FalseIn [10]: p[3] == t[3]
Out[10]: False

这样的话代码中会存在很多用于取值的索引值,导致代码的可读性并不太好,而 collections 模块的 namedtuple 很好的解决了这个问题。

In [1]: from collections import namedtupleIn [2]: person = namedtuple("Person", ['id', 'name', 'age', 'address'])In [3]: p = person('001', 'wohu', '100', 'Shaanxi')In [4]: t = person('002', 'tom', '20', 'Beijing')In [5]: p.id
Out[5]: '001'In [6]: p.id == t.id
Out[6]: False

联系之前自己写的代码,完全可以用这个替代,而且可读性还比较好。

if img_result[5] == "car":      # img_result[5] is car typeimg_display_type += 1if img_result[7] == "black":    # img_result[7] is car colourimg_display_colour += 1if img_result[9] == 1:         # img_result[9] is thief flagimg_display_thief += 1if img_result[10] == 1:img_display_orientation += 1if img_result[11] == 1:       # img_result[11] is person flagimg_display_person += 1

2. Counter

Counter 正如名字那样,它的主要功能就是计数。

In [18]: from collections import CounterIn [19]: s = "abcdefabcdaba"In [20]: c = Counter(s)In [21]: c.most_common()  # 统计每个字符出现的次数
Out[21]: [('a', 4), ('b', 3), ('c', 2), ('d', 2), ('e', 1), ('f', 1)]In [22]: sorted(c) # 对字符按照出现次数由多到少排序
Out[22]: ['a', 'b', 'c', 'd', 'e', 'f']In [23]: c['a']        # 获取每个字符出现的次数
Out[23]: 4In [24]: c.get('a')
Out[24]: 4In [25]:

3. DefaultDict

DefaultDict 能自动创建一个被初始化的字典,也就是每个键都已经被访问过一次。在实际开发中经常会写类似下面的代码,即判断一个键是否在字典中,如果不在则给该字典对应的键赋值空列表或者字典,如果在,则进行某种赋值等。

In [38]: d = {}In [39]: k = ['a','b', 'c', 'a']In [40]: for i in k:...:     if i not in d:...:         d[i] = []...:     else:...:         d[i].append('x')...:         In [41]: d
Out[41]: {'a': ['x'], 'b': [], 'c': []}

有了 defaultdict 就可以省略这个 if-else 分支,代码如下:

  • 默认值为列表:
In [47]: from collections import defaultdictIn [48]: d = defaultdict(list)In [49]: d['a'].append('1')In [50]: d
Out[50]: defaultdict(list, {'a': ['1']})In [51]: d['b'].append('2')In [52]: d
Out[52]: defaultdict(list, {'a': ['1'], 'b': ['2']})
  • 默认值为字典:
In [53]: from collections import defaultdictIn [54]: d = defaultdict(dict)In [55]: d
Out[55]: defaultdict(dict, {})In [56]: d['a']['1'] = "a1"In [57]: d
Out[57]: defaultdict(dict, {'a': {'1': 'a1'}})In [58]: d['b']['2'] = "b2"In [59]: d
Out[59]: defaultdict(dict, {'a': {'1': 'a1'}, 'b': {'2': 'b2'}})
  • 默认值为整型
In [60]: d = defaultdict(int)In [61]: d
Out[61]: defaultdict(int, {})In [62]: d['a'] = 1In [63]: d['b'] = 2In [64]: d
Out[64]: defaultdict(int, {'a': 1, 'b': 2})

Python collections 模块 namedtuple、Counter、defaultdict相关推荐

  1. python collections 中的 Counter, defaultdict, OrderedDict, namedtuple, deque

    1 Counter 计数,以下的例子,找出列表中元素的重复次数: from collections import Counterdevice_temperatures = [13.5, 14.0, 1 ...

  2. python︱ collections模块(namedtuple/defaultdict/OrderedDict等)

    collections有的功能: ['deque', 'defaultdict', 'namedtuple', 'UserDict', 'UserList', 'UserString',\'Count ...

  3. Python中Collections模块的Counter容器类使用教程

    Python中Collections模块的Counter容器类使用教程 1.collections模块 collections模块自Python2.4版本开始被引入,包含了dict,set,list, ...

  4. 一文看懂Python collections模块的高效数据类型

    原作: George Seif, 发表于medium.com, 大江狗原创翻译, 并对原文稍作修改. Python的最大优势之一是其广泛的模块和软件包.这将Python的功能扩展到许多受欢迎的领域,包 ...

  5. python collections模块(数据结构常用模块)计数器Counter 双向队列deque 默认字典defaultdict 有序字典OrderedDict 可命名元组namedtuple

    collections 模块----Python标准库,是数据结构常用模块 常用类型有: 计数器(Counter) 双向队列(deque) 默认字典(defaultdict) 有序字典(Ordered ...

  6. Python标准库——collections模块的Counter类

    更多16 最近在看一本名叫<Python Algorithm: Mastering Basic Algorithms in the Python Language>的书,刚好看到提到这个C ...

  7. Python标准库collections模块的Counter类

    collections模块 collections模块自Python 2.4版本开始被引入,包含了dict.set.list.tuple以外的一些特殊的容器类型,分别是: OrderedDict类:排 ...

  8. python中counter_Python collections模块中counter()的详细说明,Pythoncollections,之,Counter,详解...

    collections模块 ==> Python标准库,数据结构常用的模块:collections包含了一些特殊的容器,针对Python内置的容器,例如list.dict.set和tuple,提 ...

  9. collections模块的Counter类

    collections模块自Python 2.4版本开始被引入,包含了dict.set.list.tuple以外的一些特殊的容器类型,分别是: OrderedDict类:排序字典,是字典的子类.引入自 ...

最新文章

  1. 5如何将表格的一行数据清空_微信公众号推文中如何自定义添加表格?
  2. python连接sqlserver_python 链接sqlserver 写接口实例
  3. ClamAV病毒库增加特征码
  4. 通过xml 生成html页面,使用xmldom在服务器端生成静态html页面
  5. day01-计算机操作系统java编程入门
  6. 浅谈前端实现页面加载进度条以及 nprogress.js 的实现
  7. 详解 | 求你别用效率低下的I/O了,要不试试这种I/O
  8. 【dp】URAL-1018
  9. 受疫情影响 蔚来整车生产已经暂停
  10. linux脚本怎么发送到桌面,如何在Linux上使用Zenity创建简单的图形Shell脚本
  11. 计算机及应用学习顺序,自考计算机及应用专业经验谈
  12. qt tcp不可以循环发送_Qt tcp 多线程下QTCPsocket不能发送数据~解决办法(2)
  13. 华为OJ-数独(C语言、递归)
  14. excel保存快捷键_如何用Excel练英语口语?我就是上班的时候这样偷偷学英语的!...
  15. 大数据、数据挖掘和机器学习,带了哪些业务价值?
  16. TSP、MTSP问题遗传算法详细解读及python实现
  17. 北京交通大学计算机学院 于剑,北京交通大学计算机与信息技术学院硕导介绍:于剑...
  18. 使用测温软件EVEREST和鲁大师的一些总结
  19. python算法详解 张玲玲_Python算法详解
  20. NNI speedup_model()代码笔记

热门文章

  1. 并发 vs 并行 (Concurrency Is Not Parallelism)
  2. Ramsey定理数学
  3. 最全Pycharm教程(43)——Pycharm扩展功能之UML类图使用 代码结构
  4. java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)
  5. 超轻量AI引擎MindSpore Lite
  6. Ascend Pytorch算子功能验证
  7. MindSpore数据集mindspore::dataset
  8. 用TensorRT针对AArch64用户的交叉编译示例
  9. HarmonyOS 实现跑马灯效果
  10. HarmonyOS开发工具DevEcoStudio 的下载以及运行(包含下载开发工具,sdk,模拟机,以及运行第一个应用你好,世界)