Python OrderedDict字典排序方法详解


Posted in Python onMay 21, 2020

很多人认为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中正则表达式的用法实例汇总
Aug 18 Python
让 python 命令行也可以自动补全
Nov 30 Python
浅谈python内置变量-reversed(seq)
Jun 21 Python
深入理解Python异常处理的哲学
Feb 01 Python
python数据挖掘需要学的内容
Jun 23 Python
用Python获取摄像头并实时控制人脸的实现示例
Jul 11 Python
python 实现dict转json并保存文件
Dec 05 Python
Python基于模块Paramiko实现SSHv2协议
Apr 28 Python
Python代码中如何读取键盘录入的值
May 27 Python
用Python制作mini翻译器的实现示例
Aug 17 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
Sep 29 Python
使用OpenCV校准鱼眼镜头的方法
Nov 26 Python
django中嵌套的try-except实例
May 21 #Python
Spark处理数据排序问题如何避免OOM
May 21 #Python
Django 解决开发自定义抛出异常的问题
May 21 #Python
Python logging模块写入中文出现乱码
May 21 #Python
django的403/404/500错误自定义页面的配置方式
May 21 #Python
python 3.8.3 安装配置图文教程
May 21 #Python
Python中的xlrd模块使用原理解析
May 21 #Python
You might like
PHP学习之PHP运算符
2006/10/09 PHP
php 执行系统命令的方法
2009/07/07 PHP
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
2015/03/18 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
2017/03/14 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
javascript编程起步(第七课)
2007/02/27 Javascript
利用ASP发送和接收XML数据的处理方法与代码
2007/11/13 Javascript
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
用示例说明filter()与find()的用法以及children()与find()的区别分析
2013/04/26 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
使用jQuery制作浮动工具栏的实例分享
2016/05/13 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
AngularJS 模块化详解及实例代码
2016/09/14 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
2016/11/07 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
vue-swiper的使用教程
2018/08/30 Javascript
深入学习Vue nextTick的用法及原理
2019/10/08 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
python超简单解决约瑟夫环问题
2015/05/12 Python
python开发之thread实现布朗运动的方法
2015/11/11 Python
Pandas探索之高性能函数eval和query解析
2017/10/28 Python
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
python3实现网页版raspberry pi(树莓派)小车控制
2020/02/12 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
python 实现"神经衰弱"翻牌游戏
2020/11/09 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
M.M.LaFleur官网:美国职业女装品牌
2020/10/27 全球购物
利用指针变量实现队列的入队操作
2012/04/07 面试题
高中毕业自我评价
2014/02/08 职场文书
北京奥运会主题口号
2014/06/13 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书