zoukankan      html  css  js  c++  java
  • $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'})
  • 相关阅读:
    django + dropzone.js 上传文件
    随机知识点---后续整理
    Python项目在Jenkins中的自动化测试实践(语法检查、单元测试,coverage(代码覆盖率)、自动打包)
    my read / zikao / nanjingdaxue
    OS + CentOS kernel parameter
    network / Wireshark
    使用docker部署springBoot并且yml配置文件不打包到jar中
    idea + springBoot项目配置远程调试
    MySql优化建议
    springBoot事务失效导致批量插入性能巨幅降低
  • 原文地址:https://www.cnblogs.com/jiayongji/p/7442314.html
Copyright © 2011-2022 走看看