今天来向大家介绍一下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]})

collections系列之OrderedDict【有序字典】与DefaultDict【默认字典】的更多相关文章

  1. [PY3]——创建多值映射字典?/defaultdict默认字典/setdefault()

    Defaultdict 默认字典 collections 模块中的 defaultdict(默认字典),可以用来构造“一个键映射多个值”这样的字典 如果你想保持元素的插入顺序就应该使用list, 如果 ...

  2. 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)

    Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuq ...

  3. Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)

    Counter(计数器) 是一个字典的子类,存储形式同样为字典,其中存储的键为字典的元素,值为元素出现的次数,在使用之前我们需要先导入文件 import collections 初始化一个计数器 im ...

  4. 八、collection系列-----计数器、有序字典、默认字典、可命名元组、双向队列、单向队列一.计数器(对字典的扩展)

    一.计数器(对字典的扩展) 有如下一个字典: dic = {'k1':123,'k2':123,'k3':12} 统计12出现的次数,123出现的次数   1.统计出现次数 >>> ...

  5. Python中模块之collections系列

    collection系列功能介绍 1. 常用的集中类 1. Counter(计数器) 计数器的常用方法如下: 创建一个字典计数器 格式:collections.Counter(obj) 例如:prin ...

  6. python递归、collections系列以及文件操作进阶

    global log 127.0.0.1 local2 daemon maxconn log 127.0.0.1 local2 info defaults log global mode http t ...

  7. collections系列

    一.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能 c = Counter('abcdeabcdabcaba') prin ...

  8. python-Day3-set 集合-counter计数器-默认字典(defaultdict) -可命名元组(namedtuple)-有序字典(orderedDict)-双向队列(deque)--Queue单项队列--深浅拷贝---函数参数

    上节内容回顾:C语言为什么比起他语言块,因为C 会把代码变异成机器码Pyhton 的 .pyc文件是什么python 把.py文件编译成的.pyc文件是Python的字节码, 字符串本质是 字符数组, ...

  9. python模块介绍- collections(5)-OrderedDict 有序字典

    1.3.5 OrderedDict 有序字典 OrderedDict是dict的子类,它记住了内容添加的顺序. import collections print 'Regular dictionary ...

随机推荐

  1. zclip复制到剪切板插件有个bug

    今天发现zclip复制到剪切板插件有个bug,就是在遨游和360浏览器的兼容模式下,点击复制没响应,后来我看了页面代码,发现在这两个浏览器的兼容模式下,生成的是<object>,其他浏览器 ...

  2. select count(*) as total from(select count(*) from tab_cb_casim group by `card_no`) as cai;

    子查询必须加一个别名才能执行!!

  3. Linux 下的两种分层存储方案

    背景介绍 随着固态存储技术 (SSD),SAS 技术的不断进步和普及,存储介质的种类更加多样,采用不同存储介质和接口的存储设备的性能出现了很大差异.SSD 相较于传统的机械硬盘,由于没有磁盘的机械转动 ...

  4. PyQt5系列教程(八)定时器QTimer的使用

    软硬件环境 OS X EI Capitan Python 3.5.1 PyQt 5.5.1 前言 如果需要在程序中周期性地进行某项操作,比如检测某种设备的状态,就会用到定时器.本文就来看看PyQT5中 ...

  5. tornado-模板继承extend,函数和类的导入

    大 import tornado.ioloop import tornado.web import tornado.httpserver # 非阻塞 import tornado.options # ...

  6. Java虚拟机汇编代码

    0:将一个常量加载到操作数栈 3:数值从操作数栈存储到局部变量表 4:将int类型的常量加载到操作数栈 5:数值从操作数栈存储到局部变量表 6:将一个局部变量加载到操作栈 7:将一个局部变量加载到操作 ...

  7. 【C语言】09条件编译

    条件编译的概念;通常我们希望程序的其中一部分代码只有在满足一定的情况下才进行编译,否则不参与编译,(只有参与编译的代码最终才能被执行) 这就是条件编译; 基本用法; #if condication01 ...

  8. 1.纯 CSS 创作一个按钮文字滑动特效 + 弹幕(残缺)

    原文地址:1# 视频演示如何用纯 CSS 创作一个按钮文字滑动特效 扩展后地址:https://scrimba.com/c/cJkzMfd HTML代码: <html> <head& ...

  9. linux系统更新rpm包问题 ,报错rhn-check-2.0.2-5.el7.noarch has missing requires of yum-rhn-plugin >= ('0', '1.6.4', '1')

    报错信息: rhn-check-2.0.2-5.el7.noarch has missing requires of yum-rhn-plugin >= ('0', '1.6.4', '1') ...

  10. linux 使用随笔

    目录:1,ab命令 一,ab命令 ab网站压力测试命令的参数.输出结果的中文注解 ab命令是Apache的Web服务器的性能测试工具,它可以测试安装Web服务器每秒种处理的HTTP请求. 来自: ht ...