python模块简介之有序字典(OrderedDict)


Posted in Python onDecember 01, 2016

有序字典-OrderedDict简介

示例

有序字典和通常字典类似,只是它可以记录元素插入其中的顺序,而一般字典是会以任意的顺序迭代的。参见下面的例子:

import collections

print 'Regular dictionary:'
d = {}
d['a'] = 'A'
d['b'] = 'B'
d['c'] = 'C'
d['d'] = 'D'
d['e'] = 'E'

for k, v in d.items():
  print k, v

print '\nOrderedDict:'
d = collections.OrderedDict()
d['a'] = 'A'
d['b'] = 'B'
d['c'] = 'C'
d['d'] = 'D'
d['e'] = 'E'

for k, v in d.items():
  print k, v

运行结果如下:

-> python test7.py
Regular dictionary:
a A
c C
b B
e E
d D

OrderedDict:
a A
b B
c C
d D
e E

可以看到通常字典不是以插入顺序遍历的。

相等性

判断两个有序字段是否相等(==)需要考虑元素插入的顺序是否相等

import collections

print 'dict    :',
d1 = {}
d1['a'] = 'A'
d1['b'] = 'B'
d1['c'] = 'C'
d1['d'] = 'D'
d1['e'] = 'E'

d2 = {}
d2['e'] = 'E'
d2['d'] = 'D'
d2['c'] = 'C'
d2['b'] = 'B'
d2['a'] = 'A'

print d1 == d2

print 'OrderedDict:',

d1 = collections.OrderedDict()
d1['a'] = 'A'
d1['b'] = 'B'
d1['c'] = 'C'
d1['d'] = 'D'
d1['e'] = 'E'

d2 = collections.OrderedDict()
d2['e'] = 'E'
d2['d'] = 'D'
d2['c'] = 'C'
d2['b'] = 'B'
d2['a'] = 'A'

print d1 == d2

运行结果如下:

-> python test7.py
dict    : True
OrderedDict: False

而当判断一个有序字典和其它普通字典是否相等只需判断内容是否相等。

注意

OrderedDict 的构造器或者 update() 方法虽然接受关键字参数,但因为python的函数调用会使用无序的字典来传递参数,所以关键字参数的顺序会丢失,所以创造出来的有序字典不能保证其顺序。

参考资料

https://docs.python.org/2/library/collections.html#collections.OrderedDict
https://pymotw.com/2/collections/ordereddict.html

Python 相关文章推荐
python实现合并两个数组的方法
May 16 Python
Python中的if、else、elif语句用法简明讲解
Mar 11 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
Jul 24 Python
python中matplotlib的颜色及线条控制的示例
Mar 16 Python
Python 字符串与二进制串的相互转换示例
Jul 23 Python
在Python中输入一个以空格为间隔的数组方法
Nov 13 Python
python SocketServer源码深入解读
Sep 17 Python
python集合的创建、添加及删除操作示例
Oct 08 Python
python3 requests库实现多图片爬取教程
Dec 18 Python
Python实现对adb命令封装
Mar 06 Python
如何理解Python中的变量
Jun 01 Python
Idea安装python显示无SDK问题解决方案
Aug 12 Python
Python中字符串的修改及传参详解
Nov 30 #Python
简单谈谈Python中的闭包
Nov 30 #Python
浅析Python中yield关键词的作用与用法
Nov 29 #Python
Python中 Lambda表达式全面解析
Nov 28 #Python
利用Python抓取行政区划码的方法
Nov 28 #Python
Python抓取手机号归属地信息示例代码
Nov 28 #Python
Python文本相似性计算之编辑距离详解
Nov 28 #Python
You might like
php程序的国际化实现方法(利用gettext)
2011/08/14 PHP
数据库中排序的对比及使用条件详解
2012/02/23 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
2016/12/06 PHP
『jQuery』取指定url格式及分割函数应用
2013/04/22 Javascript
推荐一个自己用的封装好的javascript插件
2015/01/29 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
jquery验证邮箱格式是否正确实例讲解
2015/11/16 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
Highcharts入门之简介
2016/08/02 Javascript
AngularJS入门教程之链接与图片模板详解
2016/08/19 Javascript
jQuery.cookie.js实现记录最近浏览过的商品功能示例
2017/01/23 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
Vue.directive 自定义指令的问题小结
2018/03/04 Javascript
实例讲解JavaScript截取字符串
2018/11/30 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
2020/08/08 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
[00:50]2014DOTA2国际邀请赛 NEWBEE战队回顾
2014/08/01 DOTA
[01:45]DOTA2众星出演!DSPL刀塔次级职业联赛宣传片
2014/11/21 DOTA
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
详解Python map函数及Python map()函数的用法
2017/11/16 Python
Django中间件实现拦截器的方法
2018/06/01 Python
Python面向对象之接口、抽象类与多态详解
2018/08/27 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
《地震中的父与子》教学反思
2014/04/10 职场文书
全国文明单位申报材料
2014/05/31 职场文书
大学生在校表现评语
2014/12/31 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书
JavaScript 去重和重复次数统计
2021/03/31 Javascript
Python趣味挑战之给幼儿园弟弟生成1000道算术题
2021/05/28 Python
如何使用PyCharm及常用配置详解
2021/06/03 Python
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android