python中字典按键或键值排序的实现代码


Posted in Python onAugust 27, 2019

字典排序

在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的。因此,为了使统计得到的结果更方便查看需要进行排序。Python中字典的排序分为按“键”排序和按“值”排序。

按“值”排序

按“值”排序就是根据字典的值进行排序,可以使用内置的sorted()函数。

sorted(iterable[, cmp[, key[, reverse]]])
  • iterable:是可迭代类型类型;
  • cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;
  • key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;
  • reverse:排序规则. reverse = True 或者 reverse = False,有默认值,默认为升序排列(False)。

返回值:是一个经过排序的可迭代类型,与iterable一样。一般来说,cmp和key可以使用lambda表达式。

如果对字典进行排序,常用的形式如下:

sorted(dict.items(), key=lambda e:e[1], reverse=True)

其中,e表示dict.items()中的一个元素,e[0]表示按键排序,e[1]则表示按值排序。reverse=False可以省略,默认为升序排列。

说明:字典的items()函数返回的是一个列表,列表的每个元素是一个键和值组成的元组。因此,sorted(dict.items(), key=lambda e:e[1], reverse=True)返回的值同样是由元组组成的列表。

例:

x=[4,6,2,1,7,9,4]
y=x[:]
y.sort()
print x
print y

输出结果如下:

[4, 6, 2, 1, 7, 9, 4]

[1, 2, 4, 4, 6, 7, 9]

说明:调用x[:]得到的是包含了x所有元素的分片,这是一种很有效率的复制整个列表的方法。通过y=x简单的将x复制给y是没有用的,因为这样做就让x和y都指向了同一个列表了。

按“键”排序

对字典进行按键排序也可以使用上面的sorted函数,只要改为sorted(dict.items(), key=lambda e:e[0], reverse=True)就可以了。不过除了这个方式之外,还有另外的方法:通过列表的排序来达到使字典有序的目的。

用到的知识:字典的keys()函数返回列表形式的键值,将该列表排序即可。列表的排序使用列表的sort()函数,详细内容参考列表排序。

总结:

方法1:最简单的方法,排列元素(key/value对),然后挑出值。字典的items方法,会返回一个元组的列表,其中每个元组都包含一对项目 ——键与对应的值。此时排序可以sort()方法。

def sortedDictValues1(adict):
items = adict.items()
items.sort()
return [value for key, value in items]

方法2:使用排列键(key)的方式,挑出值,速度比方法1快。字典对象的keys()方法返回字典中所有键值组成的列表,次序是随机的。需要排序时只要对返回的键值列表使用sort()方法。

def sortedDictValues1(adict):
keys = adict.keys()
keys.sort()
return [adict[key] for key in keys]

方法3:通过映射的方法去更有效的执行最后一步

def sortedDictValues1(adict):
keys = adict.keys()
keys.sort()
return map (adict.get,keys )

方法4:对字典按键排序,用元组列表的形式返回,同时使用lambda函数来进行;

sorted(iterable[, cmp[, key[, reverse]]]
cmp和key一般使用lambda

例:

>>> d={"ok":1,"no":2} #对字典按键排序,用元组列表的形式返回
>>> sorted(d.items(), key=lambda d:d[0])
[('no', 2), ('ok', 1)] #对字典按值排序,用元组列表的形式返回
>>> sorted(d.items(), key=lambda d:d[1])
[('ok', 1), ('no', 2)]

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

Python 相关文章推荐
PHP webshell检查工具 python实现代码
Sep 15 Python
从零学Python之入门(三)序列
May 25 Python
Python基于checksum计算文件是否相同的方法
Jul 09 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
Nov 09 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
Jan 20 Python
python实现快速排序的示例(二分法思想)
Mar 12 Python
python微信公众号之关键词自动回复
Jun 15 Python
初学者学习Python好还是Java好
May 26 Python
python实现AdaBoost算法的示例
Oct 03 Python
python 基于wx实现音乐播放
Nov 24 Python
python3代码输出嵌套式对象实例详解
Dec 03 Python
Python3 使用pip安装git并获取Yahoo金融数据的操作
Apr 08 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
Aug 27 #Python
Python使用get_text()方法从大段html中提取文本的实例
Aug 27 #Python
简单易懂Pytorch实战实例VGG深度网络
Aug 27 #Python
selenium+PhantomJS爬取豆瓣读书
Aug 26 #Python
python多任务之协程的使用详解
Aug 26 #Python
python数组循环处理方法
Aug 26 #Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
Aug 26 #Python
You might like
迅雷下载《中学科技》怀旧期刊下载
2021/02/27 无线电
单点登录 Ucenter示例分析
2013/10/29 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
2017/10/23 PHP
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
jquery弹出框的用法示例(一)
2013/08/26 Javascript
JQuery做的一个简单的点灯游戏分享
2014/07/16 Javascript
使用Jquery实现每日签到功能
2015/04/03 Javascript
javascript常用函数(1)
2015/11/04 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
2016/10/05 Javascript
提高JavaScript执行效率的23个实用技巧
2017/03/01 Javascript
jquery dataTable 后台加载数据并分页实例代码
2017/06/07 jQuery
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
2019/01/03 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
Vue 实现把表单form数据 转化成json格式的数据
2019/10/29 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
django页面跳转问题及注意事项
2019/07/18 Python
python pygame实现滚动横版射击游戏城市之战
2019/11/25 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
Python字符串及文本模式方法详解
2020/09/10 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
2020/11/06 Python
Canvas波浪花环的示例代码
2020/08/21 HTML / CSS
美味咖啡的顶级烘焙师:Cafe Britt
2018/03/15 全球购物
Lookfantastic日本官网:英国知名护肤、化妆品和头发护理购物网站
2018/04/21 全球购物
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
表彰先进的通报
2014/01/31 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL
python 解决微分方程的操作(数值解法)
2021/05/26 Python