$python collections库
collections库是python内置的集合库,本文主要讲解以下5种数据结构的用法:
- namedtuple 命名元组,是tuple的子类
- deque 双向列表
- defaultdict 有默认值的字典,是dict的子类
- OrderedDict key有序的字典,是dict的子类
- Counter 计数器,是dict的子类
准备工作
from collections import namedtuple,deque,defaultdict,OrderedDict,Counter
namedtuple (python 2.6+)
用法:namedtuple('名称',[属性列表])
Point = namedtuple('Point',['x','y'])
p = Point(1,2)
print '【Output】'
print p
print p.x,p.y
print p.count,p.index
print isinstance(p,Point)
print isinstance(p,tuple)
【Output】
Point(x=1, y=2)
1 2
<built-in method count of Point object at 0x038B2288> <built-in method index of Point object at 0x038B2288>
True
True
deque (python 2.4+)
适用于队列和栈,插入和删除元素很高效。
lst = ['a','b','c']
dq = deque(lst)
dq.append('d')
print dq
deque(['a', 'b', 'c', 'd'])
dq.pop()
'd'
print dq
deque(['a', 'b', 'c'])
dq.appendleft('-1')
print dq
deque(['-1', 'a', 'b', 'c'])
dq.popleft()
'-1'
print dq
deque(['a', 'b', 'c'])
defaultdict (python 2.5+)
当key不存在的时候可返回一个默认值,默认值由传入的函数对象决定。
dd = defaultdict(lambda:'N/A')
dd['key1'] = 'aa';
print dd['key1']
print dd['key2']
aa
N/A
OrderedDict(python 2.7+)
key值有序的字典,顺序按照插入的顺序排序。
data = [('a',1),('b',2),('c',3)]
d = dict(data)
print d
{'a': 1, 'c': 3, 'b': 2}
od = OrderedDict(data)
print od
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
Counter (python 2.7+)
用序列生成Counter对象
s = 'abcdeabcdabcaba'
c = Counter(s)
print c
Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
print c.most_common(3)
[('a', 5), ('b', 4), ('c', 3)]
print sorted(c)
['a', 'b', 'c', 'd', 'e']
print ''.join(sorted(c.elements()))
aaaaabbbbcccdde
print c.values()
[5, 3, 4, 1, 2]
print c.elements()
<itertools.chain object at 0x039BC630>
更新Counter对象
d = Counter('bbb')
c.update(d)
print c.most_common()
[('b', 7), ('a', 5), ('c', 3), ('d', 2), ('e', 1)]
用字典生成Counter对象
d = {'a':1,'b':2,'c':3}
c = Counter(d)
print c
Counter({'c': 3, 'b': 2, 'a': 1})
value值为字符串时,按照字典序排序
d = {'a':'aa1','b':'ba1','c':'ca2'}
c = Counter(d)
print c
Counter({'c': 'ca2', 'b': 'ba1', 'a': 'aa1'})
随机推荐
- Spring security UserDetailsService autowired注入失败错误
最近使用spring mvc + spring security 实现登录权限控制的时候,一直不能成功登录,检查过后是dao一直无法注入为null CustomUserDetailConfig.jav ...
- RF中空列表变量不能直接赋至为[]
RF中空列表正确定义方法为:
- leetcode -- Unique Binary Search Trees todo
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- Qt 等待一段时间例如1s
QTime dieTime = QTime::currentTime().addMSecs(1000); while( QTime::currentTime() < dieTime ) QCor ...
- 自学Ajax
使用Ajax快捷函数 说明 出于简化AJAX开发工作的流程,jQuery提供了若干了快捷函数. 实例 1.显示 test.php 返回值(HTML 或 XML,取决于返回值). $.get(" ...
- svn移动目录时如何保留原来的日志
[问题描述] 想将SVN下的文件夹A移动目录D下,同时保留文件夹A及其下面文件的SVN日志 [原来的做法] 将文件夹A直接拷贝到目录D,然后提交到SVN [原来做法的问题] 日志无 ...
- js判断对象数组中是否存在某个对象
1. 如果要判断数组中是否存在某个元素的话很好判断,直接用数组的indexOf方法就好,存在返回当前索引不存在返回-1 var arr=[1,2,3,4] arr.indexOf(3) arr.ind ...
- Echarts树图定制详解
本文讲的是如何定制Echarts的tree图.主要包括下载.全局变量名修改.左键菜单添加.右键菜单添加.内容缩放.文本过滤高亮等. 一 说明 Echarts中提供了tree图,但实际项目中,该tree ...
- DtypeWarning: Columns (1,5,7,16,......) have mixed types. Specify dtype option on import or set low_memory=False.
DtypeWarning: Columns (1,5,7,16,......) have mixed types. Specify dtype option on import or set low_ ...
- 爬虫之cookiejar模块
简介 有时候我们需要爬一些需要登录才能进入网页,这个时候就要用到cookie相关的一些模块来操作了 内置的http包里包含了cookie相关的一些模块,通过她们我们可以自动使用cookie Cooki ...