在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 相关文章推荐
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
Jan 22 Python
用Python抢过年的火车票附源码
Dec 07 Python
Python缩进和冒号详解
Jun 01 Python
Python Selenium 之关闭窗口close与quit的方法
Feb 13 Python
Django项目使用CircleCI的方法示例
Jul 14 Python
python实现抠图给证件照换背景源码
Aug 20 Python
使用Python求解带约束的最优化问题详解
Feb 11 Python
使用 Python 在京东上抢口罩的思路详解
Feb 27 Python
python图片剪裁代码(图片按四个点坐标剪裁)
Mar 10 Python
Python之字典对象的几种创建方法
Sep 30 Python
Python项目实战之使用Django框架实现支付宝付款功能
Feb 23 Python
python面向对象版学生信息管理系统
Jun 24 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 Error与Logging函数的深入理解
2013/06/03 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
2013/07/02 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
浅谈php和.net的区别
2014/09/28 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
php实现的递归提成方案实例
2015/11/14 PHP
ajax 同步请求和异步请求的差异分析
2011/07/04 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
javascript 回调函数详解
2014/11/11 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
JS双击变input框批量修改内容
2016/12/12 Javascript
利用NPM淘宝的node.js镜像加速nvm
2017/03/27 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
解决Vue不能检测数组或对象变动的问题
2018/02/24 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
[01:57]2018年度DOTA2最具潜力解说-完美盛典
2018/12/16 DOTA
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
利用Python破解斗地主残局详解
2017/06/30 Python
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
numpy判断数值类型、过滤出数值型数据的方法
2018/06/09 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
python源文件的字符编码知识点详解
2021/03/04 Python
德国苹果商店:MacTrade
2020/05/18 全球购物
标准自荐信范文
2014/01/29 职场文书
导购员的岗位职责
2014/02/08 职场文书
公司节能减排倡议书
2014/05/14 职场文书
制冷与空调专业毕业生推荐信
2014/07/07 职场文书
2014年“世界无车日”活动方案
2014/09/21 职场文书
结婚十年感言
2015/07/31 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书
Go语言切片前或中间插入项与内置copy()函数详解
2021/04/27 Golang