collections模块---(namedtuple、deque、OrderdDict、defaultdict、Counter)和configparser模块
在内置数据类型(dict、 list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、
deque、defaultdict、namedtuple 和OrderedDict等
1 namedtuple:生成可以使用名字来访问元素的内容tuple
2 deque:双端队列,可以快速的从另外一侧追加和推出内容
3 Counter:计数器,主要用于计数
4 OrderDict:有序字典
5 defaultdict:带有默认值的字典
一 namedtuple
我们知道tuple表示不变集合,例如,一个点的二维坐标就可以表示成
p=(1,2)
为了使它更明确可以使用namedtuple
from collections import namedtuple
coordinate = namedtuple('Point',['x','y']) # 定义一个namedtuple类型Point,并包含x,y属性。
p = coordinate(1,2) #创建一个p对象
print(p) #Point(x=1,y=2)
print(p.x) # 获取x属性 1
print(p.y) # 获取y属性 2
其中:Point的名字,可以随便定义,它不是关键字
应用场景:time模块 ,面向对象进阶,纸牌游戏
二 deque
使用list存储数据时,按索引访问元素很快,但是插入和删除元素很慢,
因为list是线性存储,数据量大的时候,插入和删除效率很低
deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
from collections import deque
q=deque(['a','b','c'])
q.append('x') #往后面追加一个元素
q.appendleft('y') #往左边添加一个元素
print(q) #deque(['y', 'a', 'b', 'c', 'x'])
队列是有顺序的,如果需要用到增删改查,不适合用队列,场景:抢票,秒杀
三 OrderedDict
字典从3.5版本以后是有序的,这个功能在之前使用
在3.5版本之前,key是无序的,可以使用OrederdDict
注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:
>>> od = OrderedDict()
>>> od['z'] = 1
>>> od['y'] = 2
>>> od['x'] = 3
>>> od.keys() # 按照插入的Key的顺序返回
['z', 'y', 'x']
四 defaultdict
有如下值集合 [
11
,
22
,
33
,
44
,
55
,
66
,
77
,
88
,
99
,
90.
..],将所有大于
66
的值保存至字典的第一个key中,将小于
66
的值保存至第二个key的值中。
from collections import defaultdict values = [11, 22, 33,44,55,66,77,88,99,90] my_dict = defaultdict(list) #这样的话,后面每一个key都会对应一个空列表[] for value in values:
if value>66:
my_dict['k1'].append(value)
else:
my_dict['k2'].append(value)
使用dict
时,如果引用的Key不存在,就会抛出KeyError
。如果希望key不存在时,返回一个默认值,就可以用defaultdict
:
>>> from collections import defaultdict
>>> dd = defaultdict(lambda: 'N/A')
>>> dd['key1'] = 'abc'
>>> dd['key1'] # key1存在
'abc'
>>> dd['key2'] # key2不存在,返回默认值
'N/A'
五 Counter
Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。
计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。
c = Counter('abcdeabcdabcaba')
print c
输出:Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}) #它统计了每一个元素的个数
六configparser模块
该模块适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)。
请看下面的文档
[DEFAULT]
serveraliveinterval = 45
compression = yes
compressionlevel = 9
forwardx11 = yes [bitbucket.org]
user = hg [topsecret.server.com]
host port = 50022
forwardx11 = no
要生成这样的文档该如果做
import configparser config = configparser.ConfigParser() config["DEFAULT"] = {'ServerAliveInterval': '',
'Compression': 'yes',
'CompressionLevel': '',
'ForwardX11':'yes'
}
config['bitbucket.org'] = {'User':'hg'}
config['topsecret.server.com'] = {'Host Port':'','ForwardX11':'no'} with open('example.ini', 'w') as f:
config.write(f)
可以看出节点的项,都变成小写了。当然default除外
这是因为它在写入的时候,将所有字符串使用了lower()方法,转换为小写了
下面我们开看看这个模块的增删改查
import configparser
config = configparser.ConfigParser()
config.read('example.ini')
print(config.sections()) #['bitbucket.org', 'topsecret.server.com'] default内容默认不显示
#找出‘bitbucket.org’下所有的键值对
# print(config.items('bitbucket.org'))
#[('serveraliveinterval', '45'), ('compression', 'yes'), ('compressionlevel', '9'), ('forwardx11', 'yes'), ('user', 'hg')] # print(config.add_section('yuan')) #返回None ,文件里面也没有增加内容
# config.write(open('example.ini','w')) #有了新内容
#但是##############################
#不能使用open('example.ini',w) 这个表示清空文件
#config.write表示写入内容 #那么删除一个节点呢
# config.remove_section('bitbucket.org')
# config.write(open('example.ini', "w")) # 写入文件 #修改一个节点
# config.set('yuan','k2','222') # yuan节点增加项k2 = 222
# config.write(open('example.ini', "w")) # 写入文件 #现在让我们来查看一下
for key in config['yuan']: # 注意,有default时,会默认输出它的键
print(key)
'''
k2
serveraliveinterval
compression
compressionlevel
forwardx11
它会先输出自己的内容,然后加上default的内容,其他节点也一样
'''
#删除section下面的option
config.remove_option('topsecret.server.com',"forwardx11")
config.write(open('example.ini','w'))
collections模块---(namedtuple、deque、OrderdDict、defaultdict、Counter)和configparser模块的更多相关文章
- collections集合模块 [namedtuple,deque,*]
collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtuple namedtuple是一个函数, 它用来创建一个自定义的tuple对象,并且规定了 tuple元 ...
- python基础14 ---函数模块4(configparser模块)
configparser模块 一.configparser模块 1.什么是configparser模块:configparser模块操作配置文件,配置文件的格式与windows ini和linux的c ...
- collections 数据结构模块namedtuple
namedtuple类 导入模块 from collections import namedtuple 使用方法及说明 #pycharm 里按住 ctrl键点击 collections可查看源码 #c ...
- python 全栈开发,Day27(复习, defaultdict,Counter,时间模块,random模块,sys模块)
一.复习 看下面一段代码,假如运行结果有问题,那么就需要在每一步计算时,打印一下结果 b = 1 c = 2 d = 3 a = b+c print(a) e = a + d print(e) 执行输 ...
- python模块collections中namedtuple()的理解
Python中存储系列数据,比较常见的数据类型有list,除此之外,还有tuple数据类型.相比与list,tuple中的元素不可修改,在映射中可以当键使用.tuple元组的item只能通过index ...
- 常用模块(collections模块,时间模块,random模块,os模块,sys模块,序列化模块,re模块,hashlib模块,configparser模块,logging模块)
认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...
- collections,time,random,os, sys 模块的使用
主要内容:1. 模块的简单认识2. collections模块3. time时间模块4. random模块5. os模块6. sys模块 一. 模块的简单认识什么是模块. 模块就是我们把装有特定功能的 ...
- from collections import namedtuple 使用
from collections import namedtuple Point = namedtuple('Point', ['x', 'y'])#本质就是等价于 class Point(): # ...
- Python的collections之namedtuple的使用及其优势
类实现: class User: def __init__(self, name, age, height): self.name = name self.age = age self.height ...
随机推荐
- chapter02 PCA主成分分析在手写数字识别分类的应用
#coding=utf8 # 导入numpy工具包. import numpy as np # 导入pandas用于数据分析. import pandas as pd from sklearn.met ...
- Spring DI
一. Spring DI 依赖注入 利用spring IOC实例化了对象,而DI将实例化的对象注入到需要对象的地方,完成初始化任务. 对象由spring创建,之后再由spring给属性赋值 spr ...
- Codeforces gym101955 A【树形dp】
LINK 有n个大号和m个小号 然后需要对这些号进行匹配,一个大号最多匹配2个小号 匹配条件是大号和小号构成了前缀关系 字符串长度不超过10 问方案数 思路 因为要构成前缀关系 所以就考虑在trie树 ...
- LG1116 【车厢重组】
前言 看了大家的做法,什么冒泡排序,插入排序,树状数组,线段树,都好厉害呐,我都没想出来 但我发现竟然还没有人用主席树,于是我跟大家交流一下 主席树 做法 显然我们有 \(Ans=\sum_{i=1} ...
- Web Js推断键盘出发事件
window.document.onkeydown = disableRefresh; function disableRefresh(evt){ evt = (evt) ? evt : wind ...
- Spring插件3.8.2的安装
主机环境:win8 64bit eclipse版本:4.5.2 MARS 插件版本:Spring Tool Suite3.8.2 安装过程:直接在线安装,没有先在官网把插件下载再安装. 主要步骤: 1 ...
- POJ1631 LIS模板
题目:http://poj.org/problem?id=1631 两种nlogn的方法. 1.树状数组优化暴力.有种扫描线的感觉,以时间保证位置,把值作为数组脚标. 2.记录长为...的上升子序列末 ...
- 49个你应该了解的Android Studio技巧、插件与资源 http://www.apkbus.com/blog-822721-72630.html (出处: 安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户)
49个你应该了解的Android Studio技巧.插件与资源http://www.apkbus.com/blog-822721-72630.html(出处: 安卓巴士 - 安卓开发 - Androi ...
- VS2010程序调试
http://blog.csdn.net/kingzone_2008/article/details/8133048 调试初识及实例.
- php curl_init函数用法(http://blog.sina.com.cn/s/blog_640738130100tsig.html)
使用PHP的cURL库可以简单和有效地去抓网页.你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了.无论是你想从从一个链接上取部分数据,或是取一个XML文件并把 ...