在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中AND、OR的一个使用小技巧
Feb 18 Python
python 专题九 Mysql数据库编程基础知识
Mar 16 Python
Python+matplotlib实现填充螺旋实例
Jan 15 Python
PyQt5每天必学之进度条效果
Apr 19 Python
django+xadmin+djcelery实现后台管理定时任务
Aug 14 Python
wxPython的安装与使用教程
Aug 31 Python
Python pymongo模块常用操作分析
Sep 01 Python
pyqt5 从本地选择图片 并显示在label上的实例
Jun 13 Python
python 利用已有Ner模型进行数据清洗合并代码
Dec 24 Python
Django 实现 Websocket 广播、点对点发送消息的代码
Jun 03 Python
.img/.hdr格式转.nii格式的操作
Jul 01 Python
python 如何读、写、解析CSV文件
Mar 03 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
克隆一个新项目的快捷方式
2013/04/10 PHP
php实现paypal 授权登录
2015/05/28 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
laravel 实现用户登录注销并限制功能
2019/10/24 PHP
Javascript select下拉框操作常用方法
2009/11/09 Javascript
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
编写js扩展方法判断一个数组中是否包含某个元素
2013/11/08 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
高性能JavaScript DOM编程(1)
2015/08/11 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
封装获取dom元素的简单实例
2016/07/08 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
vue+vant 上传图片需要注意的地方
2021/01/03 Vue.js
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
[00:32]2016完美“圣”典风云人物:Maybe宣传片
2016/12/05 DOTA
Python计算两个日期相差天数的方法示例
2017/05/23 Python
Python实现选择排序
2017/06/04 Python
解决Mac安装scrapy失败的问题
2018/06/13 Python
Django如何自定义model创建数据库索引的顺序
2019/06/20 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
远东集团网络工程师面试题
2014/10/20 面试题
科室工作个人总结的自我评价
2013/10/29 职场文书
上课迟到检讨书100字
2014/01/11 职场文书
《大作家的小老师》教学反思
2014/04/16 职场文书
技术合作协议书范本
2014/04/18 职场文书
电子信息工程自荐信
2014/05/26 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
世界红十字日活动总结
2015/02/10 职场文书
AudioContext 实现音频可视化(web技术分享)
2022/02/24 Javascript