前言:

import collections
print([name for name in dir(collections) if not name.startswith("_")])
['AsyncIterable', 'AsyncIterator', 'Awaitable', 'ByteString', 'Callable', 'ChainMap', 'Container', 'Coroutine',
'Counter', 'Generator', 'Hashable', 'ItemsView', 'Iterable', 'Iterator', 'KeysView', 'Mapping', 'MappingView',
'MutableMapping', 'MutableSequence', 'MutableSet', 'OrderedDict', 'Sequence', 'Set', 'Sized', 'UserDict', 'UserList',
'UserString', 'ValuesView', 'abc', 'defaultdict', 'deque', 'namedtuple']

常用:

a)Counter: 计数器,用于统计元素的数量

b)OrderDict:有序字典

c)defaultdict:值带有默认类型的字典

d)namedtuple:可命名元组,通过名字来访问元组元素

e)deque :双向队列,队列头尾都可以放,也都可以取(与单向队列对比,单向队列只能一头放,另一头取)

3.from colllections import OrderDict

python自带的字典是按key 的hash排序,所以大家都认为map是无序的。但是python的collections模块有一个OrderDict类。是一个有顺序的map.

创建

a=OrderedDict()
b=OrderedDict({2:'b',1:'c'}) m={2:'b',1:'c'} print(a,b,m) # OrderedDict()
# OrderedDict([(1, 'c'), (2, 'b')])
# {1: 'c', 2: 'b'}
#同样是保存了几个元素,但是使用OrderedDict会根据放入元素的先后顺序进行排序。所以输出的值是排好序的。

方法

map里面的操作他都有

区别map

d2={}
d2['a']='A'
d2['b']='B'
d2['c']='C' d3={}
d3['c']='C'
d3['a']='A'
d3['b']='B' print(d2 == d3)=>true
d4=collections.OrderedDict()
d4['a']='A'
d4['b']='B'
d4['c']='C' d5=collections.OrderedDict()
d5['c']='C'
d5['a']='A'
d5['b']='B' print (d1==d2)=>False

其他

dd = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
# sorted(dd.items(), key=lambda t: t[1])==>[('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)] #按key排序
kd = OrderedDict(sorted(dd.items(), key=lambda t: t[0]))
print(kd)
#按照value排序
vd = OrderedDict(sorted(dd.items(),key=lambda t:t[1]))
print(vd) #输出
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

4.defaultdict 带有默认值(None)的字典

为什么要有一个带有默认值的字典。因为当我使用普通的字典时,用法一般是dict={},添加元素的只需要dict[element] =value即,调用的时候也是如此,dict[element] = xxx,但前提是element字典里,如果不在字典里就会报错。

defaultdict就能排上用场了,defaultdict的作用是在于,当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值,这个默认值依赖于构造参数。

int=>0

str=>""

set=>set()

list=>[]......

from collections import defaultdict

dict1 = defaultdict(int)
print(dict1[1])
#结果是0
# 利用defaultdict给列表去重, 非原序
def string_duplicate_3(self, s):
# 按照之前的顺序
from collections import defaultdict
a = defaultdict()
for x in s:
a[x] = 0
return a.keys()

python之collections模块(OrderDict,defaultdict)的更多相关文章

  1. Python中collections模块

    目录 Python中collections模块 Counter defaultdict OrderedDict namedtuple deque ChainMap Python中collections ...

  2. 转载:Python中collections模块

    转载自:Python中collections模块 目录 Python中collections模块 Counter defaultdict OrderedDict namedtuple deque Ch ...

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

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

  4. python:collections模块

    Counter类 介绍:A counter tool is provided to support convenient and rapid tallies 构造:class collections. ...

  5. Python中collections模块的使用

    本文将详细讲解collections模块中的所有类,和每个类中的方法,从源码和性能的角度剖析. 一个模块主要用来干嘛,有哪些类可以使用,看__init__.py就知道 '''This module i ...

  6. python 之 Collections模块

    官方文档:https://yiyibooks.cn/xx/python_352/library/collections.html 参考: https://blog.csdn.net/songfreem ...

  7. python的Collections 模块

    Collections 模块 知识点 Counter 类 defaultdict 类 namedtuple 类 在这个实验我们会学习 Collections 模块.这个模块实现了一些很好的数据结构,它 ...

  8. 【python】collections模块(有序字典,计数器,双向队列)

    collections模块基本介绍 我们都知道,Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上 ...

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

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

随机推荐

  1. 洛谷 题解 P1133 【教主的花园】

    $n<=10^5 $ O(n)算法 状态 dp[i][j][k]表示在第i个位置,种j*10的高度的树,且这棵树是否比相邻两棵树高 转移 dp[i][1][0]=max(dp[i-1][2][1 ...

  2. There are no packages available

    { "bootstrapped": true, "channels": [ "https://raw.githubusercontent.com/Ja ...

  3. luogu P3031 [USACO11NOV]高于中位数Above the Median (树状数组优化dp)

    链接:https://www.luogu.org/problemnew/show/P3031 题面: 题目描述 Farmer John has lined up his N (1 <= N &l ...

  4. libtool

    [从网上摘录的,忘了从哪摘的了]   libtool常见于autoconf/automake,单独用的例子很少,所以我想仔细研究一下,为将来兄弟们看起来方便. 一.libtool的作用offer a ...

  5. 【AtCoder】AGC033(A-F)

    AGC033 A - Darker and Darker 直接BFS #include <bits/stdc++.h> #define fi first #define se second ...

  6. python flask 如何读取数据库数据并返回到html

    app.py from flask import Flask from flask import render_template from flask_bootstrap import Bootstr ...

  7. 以太坊再爆高危漏洞!黑客增发ATN 1100万枚token事件始末

    事情发生在5月中旬,ATN技术人员发现Token合约由于存在漏洞受到攻击.不过ATN基金会随后透露,将销毁1100万个ATN,并恢复ATN总量,同时将在主链上线映射时对黑客地址内的资产予以剔除,确保原 ...

  8. CSS实现单选按钮

    import React from 'react' import PropTypes from 'prop-types' import CX from 'classnames' import _ fr ...

  9. WEB监控系列第三篇:graphite指南

    一  使用说明 以下是喂数据的方式,但是在实际使用中我们使用statsd来喂数据,请参考我的第四篇文章:statsd指南 喂数据有三种方式: There are three main methods ...

  10. 调研task_struct结构体

    进程的描述PCB task_struct——PCB的一种,在linux中描述进程的结构体叫做task_struct. task_struct内容分类: 标识符:描述本进程的唯一标识符,用来区别其他进程 ...