在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中的二进制位运算符
May 13 Python
Python3学习urllib的使用方法示例
Nov 29 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 Python
Python安装图文教程 Pycharm安装教程
Mar 27 Python
python 文件转成16进制数组的实例
Jul 09 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
Apr 06 Python
Python玩转加密的技巧【推荐】
May 13 Python
python 直接赋值和copy的区别详解
Aug 07 Python
将Python文件打包成.EXE可执行文件的方法
Aug 11 Python
浅谈python量化 双均线策略(金叉死叉)
Jun 03 Python
python3让print输出不换行的方法
Aug 24 Python
django中websocket的具体使用
Jan 22 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
ecshop 批量上传(加入自定义属性)
2012/03/20 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
JS 有名函数表达式全面解析
2010/03/19 Javascript
jQuery温习篇 强大的JQuery选择器
2010/04/24 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
js简单设置与使用cookie的方法
2016/01/22 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
jQuery 获取多选框的值及多选框中文的函数
2016/05/16 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
JS敏感词过滤代码
2016/12/23 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
js DOM的事件常见操作实例详解
2019/12/16 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
在python 中split()使用多符号分割的例子
2019/07/15 Python
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
Python常用数据分析模块原理解析
2020/07/20 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
盛大笔试题
2016/11/05 面试题
销售经理工作职责范文
2013/12/03 职场文书
机械设计毕业生自荐信
2014/02/02 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
MATLAB 全景图切割及盒图显示的实现步骤
2021/05/14 Python
小程序实现悬浮按钮的全过程记录
2021/10/16 HTML / CSS