在Python中字典按值排序的实现方法


Posted in Python onNovember 12, 2020

一、sorted高阶函数

  这种方法更为简洁,更为推荐。

d={'a':1,'c':3,'b':2}  # 首先建一个字典d

#d.items()返回的是: dict_items([('a', 1), ('c', 3), ('b', 2)])

d_order=sorted(d.items(),key=lambda x:x[1],reverse=False) # 按字典集合中,每一个元组的第二个元素排列。
                              # x相当于字典集合中遍历出来的一个元组。
print(d_order)   # 得到: [('a', 1), ('b', 2), ('c', 3)]

下面是sorted排序方法的详细解释:

1. sorted高阶函数语法格式:  sorted(可迭代对象,key=函数名,reverse=False/True)

     作用:从可迭代对象中,依次取出一个元素,该元素再按照key规定的排列依据排序。

     可迭代对象:即可依次取值的对象,例如:集合,序列(列表,字符串,元组),字典等。

     key : 是列表排列的依据,一般可以自定义一个函数返回排序的依据,再把函数名绑定给key。

     reverse : 译为反转,reverse默认等于False,从小到大排序。等于True时,从大到小排序。

2. 匿名函数lambda的格式:    函数名 = lambda  [形参1,形参2,...] :  ,返回操作语句块产生的结果并绑定给函数名。

例如: key=lambda x : x[1]      

            x:相当于字典集合中的一个元组, 例:dict_items([('a', 1), ('c', 3), ('b', 2)])中的('a', 1)或('c', 3)或('b', 2)

            x[1]: 返回x中的第二个元素,即键值对元组中的值。dict_items([('a', 1), ('c', 3), ('b', 2)])中的1或2或3

注意:

  (1) sorted函数中的可迭代对象不要用字典d,那样只能迭代出的字典d的键。要用d.items()才可迭代出字典的键值对。

    例:不能用 d_order=sorted(d,key=lambda x:x[1],reverse=False)

            要用 d_order=sorted(d.items(),key=lambda x:x[1],reverse=False)

  (2) sorted函数排好序后,要绑定一个对象(赋值),例:d_order=sorted(d.items(),key=lambda x:x[1],reverse=False).

     因为字典是无序类型,用sorted函数排好序后不绑定d_order,字典会自动打乱顺序。

二、列表的.sort()方法

Python中的字典是无序类型,没有自己的排序方法。但可以用列表的.sort()方法来进行排序。

我们首先要把字典转换为列表,再进行排序。

 例子:

d={'a':1,'c':3,'b':2}  # 首先建一个字典d

d.items()    # 得到: dict_items([('a', 1), ('c', 3), ('b', 2)])

L=list(d.items())    # 得到列表: L=[('a', 1), ('c', 3), ('b', 2)]

L.sort(key=lambda x:x[1],reverse=False) # 按列表中,每一个元组的第二个元素从小到大排序。
                     # x代表从L中遍历出的一个元组

print(L)   # 得到: [('a', 1), ('b', 2), ('c', 3)]

 注意:

 1.上面的例子中最要的一步就是:  L=list(d.items()),  即: L = list(dict_items([('a', 1), ('c', 3), ('b', 2)])

      用list()列表构造函数,将L= dict_items([('a', 1), ('c', 3), ('b', 2)]) 转变为列表,得到列表:  L=[('a', 1), ('c', 3), ('b', 2)]

      ps: 今天早上我折腾了好久才发现,list()构造函数竟然可以把 d.items()产生的dict_items键值对集合类型,直接变成列表,简直NB啊!

 2.再简单说一下列表的L.sort()方法:  L.sort(key=函数名,reverse=False/True)

     L.sort():会自动遍历列表中的元素,即依次取出一个元素。再以key绑定的函数为依据排序。

     例如: L.sort(key=lambda x:x[1],reverse=False)       #L=[('a', 1), ('c', 3), ('b', 2)]

                 从列表L中取出第一个元素('a', 1)元组,以元组的第二个元素'1'为排序依据,

                 再依次从列表中依次取出第二,第三,...个元素确定排序依据,

                 最后reverse=False,按从小到大的顺序排列。

     注: L.sort()内部还有其他参数,感兴趣的小伙伴可以用度娘搜一下。

三、扩展:

其实小c君是在用jieba库进行文本词频统计时,才遇到了给字典排序的这个问题。

小伙伴们感兴趣的话可以看一下下面的代码,也可以自己找个文本试一下,非常有趣。

import jieba
with open("天龙八部-网络版.txt",'r',encoding='utf-8') as f:
  txt=f.read()
  words=jieba.lcut(txt)
  d={}
  for word in words:
    d[word]=d.get(word,0)+1
  del d[' ']
  del d['\n']
with open("天龙八部-词语统计.txt",'w',encoding='utf-8') as f2:
  d=sorted(d.items(),key=lambda x:x[1],reverse=True)
  for x,y in d:
    f2.write("{}:{}\n".format(x,y))

注:还可以优化代码,进行文本降噪。

四、后记:

今天折腾了一天,终于把字典排序的问题解决了。

到此这篇关于在Python中字典按值排序的实现方法的文章就介绍到这了,更多相关Python 字典按值排序内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中输出ASCII大文字、艺术字、字符字小技巧
Apr 28 Python
Python爬豆瓣电影实例
Feb 23 Python
Python常见排序操作示例【字典、列表、指定元素等】
Aug 15 Python
python判断计算机是否有网络连接的实例
Dec 15 Python
python爬虫URL重试机制的实现方法(python2.7以及python3.5)
Dec 18 Python
Python socket模块实现的udp通信功能示例
Apr 10 Python
python里运用私有属性和方法总结
Jul 08 Python
基于python调用psutil模块过程解析
Dec 20 Python
使用 Python ssh 远程登陆服务器的最佳方案
Mar 06 Python
浅谈django 模型类使用save()方法的好处与注意事项
Mar 28 Python
使用Python爬虫爬取小红书完完整整的全过程
Jan 19 Python
详解python3类型注释annotations实用案例
Jan 20 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
Nov 12 #Python
通过代码简单了解django model序列化作用
Nov 12 #Python
Django contrib auth authenticate函数源码解析
Nov 12 #Python
python 获取字典键值对的实现
Nov 12 #Python
Sentry错误日志监控使用方法解析
Nov 12 #Python
python 利用opencv实现图像网络传输
Nov 12 #Python
Anaconda详细安装步骤图文教程
Nov 12 #Python
You might like
smarty的section嵌套循环用法示例
2016/05/28 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
JS无限树状列表实现代码
2011/01/11 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
jQuery三组基本动画与自定义动画操作实例总结
2020/05/09 jQuery
浅谈vue的第一个commit分析
2020/06/08 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
火车票抢票python代码公开揭秘!
2018/03/08 Python
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
2018/07/31 Python
Python清空文件并替换内容的实例
2018/10/22 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
Python matplotlib学习笔记之坐标轴范围
2019/06/28 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
Python 定义只读属性的实现方式
2020/03/05 Python
Python实现代码块儿折叠
2020/04/15 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
python中函数返回多个结果的实例方法
2020/12/16 Python
How TDD works
2012/09/30 面试题
办公室主任职责范文
2013/11/08 职场文书
初入社会应届生求职信
2013/11/18 职场文书
学校后勤岗位职责
2014/02/19 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
关于教师节的广播稿
2014/09/10 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
同事离别感言
2015/08/04 职场文书
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
2021/06/21 MySQL
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL