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'})

随机推荐

  1. Amazon(vpc)对等网络

    对等连接测试 1.1 东京账户A创建对等连接 注意,双方的vpc网段不能重复,如果重复会造成无法配置路由表 输入双方信息 账户ID和VPC 1.2 东京账户A查看 查看连接信息 显示正在处理接受,需要 ...

  2. android 清除缓存功能

    本应用数据清除管理器 DataCleanManager.java   是从网上摘的 忘了 名字了 对不住了 载入一个webview   产生缓存  众所周知的webview是产生缓存的主要原因之中的一 ...

  3. Leetcode: Anagrams(颠倒字母而成的字)

    题目 Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will ...

  4. linux C之alarm函数 转

    原文出处:http://blog.sina.com.cn/s/blog_6a1837e90100uhl3.html alarm也称为闹钟函数,alarm()用来设置信号SIGALRM在经过参数seco ...

  5. centos7 docker install

    env: os :centos 7 vmware steps: 1.yum  -y install docker after installed ,using   docker version cmd ...

  6. 170428、centos6.5安装Subversion + Apache +Jsvnadmin

    服务器地址:192.168.0.112 root用户操作 建议 安装前 更 新操作系统 # yum update 更新完成后重启 # reboot 安装 装 apache # yum install ...

  7. hibernate的二级缓存----collection和query的二级缓存

    collection二级缓存: 不使用集合的二级缓存时: 运行下面的代码: @Test public void testCollectionSecondLevelCache1(){ Departmen ...

  8. HQL的第一个程序

    使用HQL查询数据库: 分为以下几个步骤 1获取query对象 //1获取query对象 String hql="FROM Employee e where e.salary>?&qu ...

  9. SVN备份及恢复

    一,SVN备份 svnadmin dump /data/svn/blzfmima/ > /tmp/full.svn.bak 其中/data/svn/blzfmima/为svn文件夹,导出成一个备 ...

  10. 零基础在Linux服务器上部署javaweb项目

    本教程使用的工具下载链接:http://pan.baidu.com/s/1sl1qz2P 密码:43pj 一.安装JDK 1.首先要查看服务器的系统版本,是32位还是64位 #getconf LONG ...