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="/n") 
 
# <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]}) 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/20913.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论