python中OrderedDict的使用方法详解


Posted in Python onMay 05, 2017

很多人认为python中的字典是无序的,因为它是按照hash来存储的,但是python中有个模块collections(英文,收集、集合),里面自带了一个子类

OrderedDict,实现了对字典对象中元素的排序。请看下面的实例:

import collections
print "Regular dictionary"
d={}
d['a']='A'
d['b']='B'
d['c']='C'
for k,v in d.items():
  print k,v

print "\nOrder dictionary"
d1 = collections.OrderedDict()
d1['a'] = 'A'
d1['b'] = 'B'
d1['c'] = 'C'
d1['1'] = '1'
d1['2'] = '2'
for k,v in d1.items():
  print k,v

输出:

Regular dictionary
a A
c C
b B

Order dictionary
a A
b B
c C
1 1
2 2

可以看到,同样是保存了ABC等几个元素,但是使用OrderedDict会根据放入元素的先后顺序进行排序。所以输出的值是排好序的。

OrderedDict对象的字典对象,如果其顺序不同那么Python也会把他们当做是两个不同的对象,请看事例:

print 'Regular dictionary:'
d2={}
d2['a']='A'
d2['b']='B'
d2['c']='C'

d3={}
d3['c']='C'
d3['a']='A'
d3['b']='B'

print d2 == d3

print '\nOrderedDict:'
d4=collections.OrderedDict()
d4['a']='A'
d4['b']='B'
d4['c']='C'

d5=collections.OrderedDict()
d5['c']='C'
d5['a']='A'
d5['b']='B'

print d1==d2

输出:

Regular dictionary:
True

OrderedDict:
False

再看几个例子:

dd = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
#按key排序
kd = collections.OrderedDict(sorted(dd.items(), key=lambda t: t[0]))
print kd
#按照value排序
vd = collections.OrderedDict(sorted(dd.items(),key=lambda t:t[1]))
print vd

#输出
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现统计单词出现的个数
May 28 Python
python中利用Future对象异步返回结果示例代码
Sep 07 Python
基于Python实现用户管理系统
Feb 26 Python
利用python求积分的实例
Jul 03 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
Jul 15 Python
Python八皇后问题解答过程详解
Jul 29 Python
python Django 创建应用过程图示详解
Jul 29 Python
django中的图片验证码功能
Sep 18 Python
解析Python 偏函数用法全方位实现
Jun 26 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
Aug 19 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 Python
教你使用Python获取QQ音乐某个歌手的歌单
Apr 03 Python
Python编程生成随机用户名及密码的方法示例
May 05 #Python
Python实现统计文本文件字数的方法
May 05 #Python
Python部署web开发程序的几种方法
May 05 #Python
Python中异常重试的解决方案详解
May 05 #Python
Django的信号机制详解
May 05 #Python
Python中模块与包有相同名字的处理方法
May 05 #Python
详解python 字符串和日期之间转换 StringAndDate
May 04 #Python
You might like
php中explode函数用法分析
2014/11/15 PHP
Laravel中任务调度console使用方法小结
2017/05/07 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
2018/08/19 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
2019/04/10 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
JS通过分析userAgent属性来判断浏览器的类型及版本
2014/03/28 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
jQuery的Scrollify插件实现滑动到页面下一节点
2015/07/05 Javascript
js实现具有高亮显示效果的多级菜单代码
2015/09/01 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
2015/09/09 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
详解nodejs中的process进程
2017/03/19 NodeJs
使用Vue制作图片轮播组件思路详解
2018/03/21 Javascript
微信小程序上传图片功能(附后端代码)
2020/06/19 Javascript
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
layui 给数据表格加序号的方法
2018/08/20 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
基于Node.js搭建hexo博客过程详解
2019/06/25 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
2019/09/10 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
2019/11/04 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
JS正则表达式验证密码强度
2020/03/18 Javascript
jquery实现简易验证插件封装
2020/09/13 jQuery
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
详解python 破解网站反爬虫的两种简单方法
2020/02/09 Python
如何基于Python代码实现高精度免费OCR工具
2020/06/18 Python
CSS3的RGBA中关于整数和百分比值的转换
2015/08/04 HTML / CSS
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
英智兴达软件测试笔试题
2016/10/12 面试题
会走路的树教学反思
2014/02/20 职场文书
老师对学生的评语
2014/04/18 职场文书
中秋客户感谢信
2015/01/22 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang