美文网首页
第十九章 必会标准库模块 collections

第十九章 必会标准库模块 collections

作者: 运维开发_西瓜甜 | 来源:发表于2019-01-04 10:16 被阅读34次

    必学标准库 collections

    标准库参考文件

    一、defaultdict

    在创建字典时,对每个新的键都会指定一个默认值。

    这个默认值的参数是一个函数,函数返回的值就会作为初始字典每个键的默认值。

    # 1. 默认值是整数
    from collections import defaultdict
    dic_int = defaultdict(int)
    print(dic_int)
    
    dic_int['a'] ='hello'
    result =dic_int['b']
    print(result)
    print(dic_int)
    
    # 2. 默认值是列表
    dic_list = defaultdict(list)
    print(dic_val)
    
    dic_list['disk_info'].append(1)
    print(dic_list)
    
    # 3. 默认值是字典
    dic_dict = defaultdict(dict)
    print(dic_val)
    
    dic_dict['base_info'].update({"host_name": "dbserver1"})
    base_info = dic_dict.get('base_info')
    h_name = base_info.get('host_name')
    
    print(h_name)
    
    # 4. 默认值是自定义的值
    def default_val():
        return "默认没有此 key"
    
    dic_val = defaultdict(default_val)
    print(dic_val)
    
    dic_val['a']='hello'
    ret = dic_val['b']
    print(dic_val)
    
    # 5. 也可以是匿名函数
    dic_val = defaultdict(lambda: '默认没有此 key')
    
    # 6. 不给传参,默认值则是 None
    dic_none = defaultdict()
    


    二、OrderDict 有序字典

    有序字典 OrderDict() 会记住字典添加的顺序,然后按照原来添加时的相同顺序返回 。

    from collections import OrderedDict
    dic_order = OrderedDict([('M', 1),('Q', 2),
        ('A', 3)
    ])
    
    for key in dic_order:
        print(key)
    

    目前 Python3.x 的字典都是有序的,但不代表在 Python3.x 中 OrderDict 就和 dict()无差别了。 看下面的例子。

    from collections import OrderedDict
    
    d = OrderedDict()
    
    d['a'] =1
    d['b'] =2
    d['c'] =3
    
    print(d)
    
    # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    item = d.popitem()
    
    print(item)  # ('c', 3)
    print(d)     # OrderedDict([('a', 1), ('b', 2)])
    
    d.move_to_end('a')
    print(d)  # OrderedDict([('b', 2), ('a', 1)])
    

    从以上示例中可以看出,OrderedDict 还提供了两个方法:

    1. popitem() 可以删除字典中的键值对儿,并且的大这个键值对儿,而默认的 dict 对象只提供了 pop() 方法,这个方法只能返回值。
    2. move_to_end('key') 可以指定某一个键值对儿放到整个字典的最后。


    三、deque 双端队列

    deque 具有栈和队列的特征。

    可以从序列的任意一端添加和删除元素。

    from collections import deque
    
    dq = deque('hello')
    left_result = dq.popleft()
    right_result = dq.pop()
    print(left_result)
    print(right_result)
    


    四、namedtuple 命名元组

    from collections import namedtuple
    
    Person = namedtuple('Person', ['name','age'])
    
    p1 = Person("shark", 18)
    print(p1.name)
    print(p1.age)
    


    五、Counter 计数器

    li = ['hello','qf','yangge','qf','yangge','hello','qf','yangge']
    c1 = Counter(li)
    
    # 倒序
    item1 = c1.most_common()
    
    # 只输出次数大于 1 的
    item2 = c1.most_common(1)
    
    # 相加减
    l2 = ("yangge","shark","xiguatian","yangge","shark","xiguatian")
    c2 = Counter(l2)
    
    c1 + c2
    c1 - c2
    
    # 交集 得到共有的
    c1 & c2
    
    # 并集 得到所有的
    c1 | c2
    


    六、ChainMap 把多个字典合并进行循环

    1. 未使用 ChainMap

    d1 = {'a': 1, 'b': 2}
    d2 = {'c': 3, 'e': 4}
    
    for k, v in d1.items():
        print(k, v)
    
    for k, v in d2.items():
        print(k, v)
    
    """
    a 1
    b 2
    c 3
    e 4
    """
    

    2.使用 ChainMap

    键无重复

    d1 = {'a': 1, 'b': 2}
    d2 = {'c': 3, 'e': 4}
    
    new_dic = ChainMap(d1,d2)
    for k, v in new_dic.items():
        print(k, v)
    
    """
    e 4
    a 1
    b 2
    c 3
    """
    

    创建的时候键有重复

    d1 = {'a': 1, 'c': 2}
    d2 = {'c': 3, 'e': 4}
    
    new_dic = ChainMap(d1,d2)
    for k, v in new_dic.items():
        print(k, v)
    
    """
    e 4
    c 2
    a 1
    """
    

    更新的时候 键有重复

    d1 = {'a': 1, 'c': 2}
    d2 = {'c': 3, 'e': 4}
    
    new_dic = ChainMap(d1,d2)
    for k, v in new_dic.items():
        print(k, v)
    print('*' * 10)
    
    new_dic.update({'c': 30})
    for k, v in new_dic.items():
        print(k, v)
    
    """
    e 4
    c 2
    a 1
    **********
    e 4
    c 30
    a 1
    """
    

    相关文章

      网友评论

          本文标题:第十九章 必会标准库模块 collections

          本文链接:https://www.haomeiwen.com/subject/syemlqtx.html