zoukankan      html  css  js  c++  java
  • python之collections模块(OrderDict,defaultdict)

    前言:

    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()
  • 相关阅读:
    K8s(2)-部署应用
    Docker-常用命令(7)
    Docker-堆栈stack(6)
    Docker-集群swarm(5)
    Docker-服务(4)
    Docker的概念术语(2)
    k8s(1)-使用kubeadm安装Kubernetes
    Celery-分布式任务队列
    使用Python管理压缩包
    jQuery基础
  • 原文地址:https://www.cnblogs.com/wqbin/p/10222768.html
Copyright © 2011-2022 走看看