zoukankan      html  css  js  c++  java
  • collections系列之OrderedDict【有序字典】与DefaultDict【默认字典】

    今天来向大家介绍一下collections系列中的OrderedDict和DefaultDict,这两种类均是通过collections来创建的,均是对dict字典加工,所有都继承了dict字典的方法

    先来介绍一下OrderDict,又叫做有序字典,字典本身是无序的,这个有序的字典的是如何实现的呢,其实就是把dict和list结合起来,就成了有序的字典,因为list是有序的

    1、创建一个OrderDict,我们可以对比一下普通的dict和OrderedDict,同样,创建OrderedDict需要先import collections 模块;

    import collections
    # ordereddict是对字典的加工,字典本身是没有顺序的,ordereddict叫做有序字典,利用list和dict来构建有序字典【ordereddict】
    
    d1 = dict()
    d2 = collections.OrderedDict()
    print(type(d1),type(d2),sep="
    ")
    
    # <class 'dict'>
    # <class 'collections.OrderedDict'>
    

    2、多次打印普通字典和OrderedDict字典,就可以看出来,一个是有序的,一个是无序的

    d1["k1"] = "v1"
    d1["k2"] = "v2"
    d1["k3"] = "v3"
    
    d2["k1"] = "v1"
    d2["k2"] = "v2"
    d2["k3"] = "v3"
    print(d1,type(d1))
    # {'k1': 'v1', 'k3': 'v3', 'k2': 'v2'} <class 'dict'>
    print(d2,type(d2))
    # OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')]) <class 'collections.OrderedDict'>
    

    3、move_to_end方法,可以把指定的元素放在最后面

    print(d2)
    # OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
    d2.move_to_end("k1")
    print(d2)
    # OrderedDict([('k2', 'v2'), ('k3', 'v3'), ('k1', 'v1')])
    

    4、popitem方法,删除最后一个元素

    print(d2)
    # OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4')])
    d2.popitem()
    print(d2)
    # OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
    d2.popitem()
    print(d2)
    # OrderedDict([('k1', 'v1'), ('k2', 'v2')])
    

    5、pop方法,删除指定的元素,并可以接受删除的值

    print(d2)
    # OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4')])
    r = d2.pop("k2")
    print(d2)
    # OrderedDict([('k1', 'v1'), ('k3', 'v3'), ('k4', 'v4')])
    print(r)
    # v2
    

    6、setdefault方法,给字典设定指定的value值,如果字典中存在该元素,则不会更新该元素对应的value,如果不在存在,则会更新新的元素到字典中

    print(d1)
    # OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
    d1.setdefault("k4")
    d1.setdefault("k5","v5")
    d1.setdefault("k1","v0")
    print(d1)
    # OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', None), ('k5', 'v5')])
    

    7、update方法,可以更新dict,update方法和setdefault方法不同的地方是,update更新的元素如果在字典中存在,则会更新为新的值

    print(d1)
    # OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', None), ('k5', 'v5')])
    d1.update({"k6":"v6","k1":"v0"})
    print(d1)
    
    # OrderedDict([('k1', 'v0'), ('k2', 'v2'), ('k3', 'v3'), ('k4', None), ('k5', 'v5'), ('k6', 'v6')])
    

      

     下面在来向大家介绍一下DefaultDict,默认字典其实就是可以指定字典中的value的类型

    1、比如在下面的例子中,可以指定dict的value的类型为list,下面的例子就是创建一个DefaultDict,并可以直接使用list的append方法更新字典

    d1 = collections.defaultdict(list)
    print(d1)
    # defaultdict(<class 'list'>, {})
    d1["k1"].append("v1")
    print(d1)
    # defaultdict(<class 'list'>, {'k1': ['v1']})
    

    2、用DefaultDict来做一个练习,把list中大于66的元素和小于66的元素

    l1 = [123,12,344,56,777,888,999,999,8,33]
    test_list = collections.defaultdict(list)
    for i in l1:
        if i > 66:
            test_list["大于66的值"].append(i)
        else:
            test_list["小于66的值"].append(i)
    
    print(test_list)
    
    # defaultdict(<class 'list'>, {'大于66的值': [123, 344, 777, 888, 999, 999], '小于66的值': [12, 56, 8, 33]})
    
  • 相关阅读:
    JavaScript正则表达式
    web页面全角&半角
    WEB中的GET和POST
    设计模式之观察者模式
    初识numpy的多维数组对象ndarray
    【ACM】求高精度幂
    C++ 变量初始化规则
    浅谈const限定符
    堆和栈的区别(转过无数次的文章)
    【编程小题目8】求解完数
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/6517484.html
Copyright © 2011-2022 走看看