在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中操作时间之mktime()方法的使用教程
May 22 Python
基于wxpython实现的windows GUI程序实例
May 30 Python
python中os模块详解
Oct 14 Python
windows系统下Python环境的搭建(Aptana Studio)
Mar 06 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
Jun 22 Python
Django实现celery定时任务过程解析
Apr 21 Python
使用pycharm和pylint检查python代码规范操作
Jun 09 Python
利用python中的matplotlib打印混淆矩阵实例
Jun 16 Python
基于Python下载网络图片方法汇总代码实例
Jun 24 Python
opencv 图像加法与图像融合的实现代码
Jul 08 Python
Django利用AJAX技术实现博文实时搜索
May 06 Python
python+opencv实现视频抽帧示例代码
Jun 11 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
PHP 开发环境配置(Zend Server安装)
2010/04/28 PHP
带密匙的php加密解密示例分享
2014/01/29 PHP
php图片缩放实现方法
2014/02/20 PHP
php使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
使用PHP如何实现高效安全的ftp服务器(一)
2015/12/20 PHP
PHP闭包函数传参及使用外部变量的方法
2016/03/15 PHP
php构造函数与析构函数
2016/04/23 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
Javascript----文件操作
2007/01/18 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
javascript实现uploadify上传格式以及个数限制
2015/11/23 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
好好了解一下Cookie(强烈推荐)
2016/06/14 Javascript
BootstrapValidator实现注册校验和登录错误提示效果
2017/03/10 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
2017/03/31 Javascript
浅谈Angular2 模块懒加载的方法
2017/10/04 Javascript
Django中使用jquery的ajax进行数据交互的实例代码
2017/10/15 jQuery
swiper移动端轮播插件(触碰图片之后停止轮播)
2017/12/28 Javascript
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
python实现的config文件读写功能示例
2019/09/24 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
2020/04/01 Python
Python实现在线批量美颜功能过程解析
2020/06/10 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
幼儿园中班新学期寄语
2014/01/18 职场文书
教学实习自我评价
2014/01/28 职场文书
小学生考试获奖感言
2014/01/30 职场文书
学习教师法的心得体会
2014/09/03 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
《敬重卑微》读后感3篇
2019/11/26 职场文书