Python中给字典排序的七种方法详解!
Python中给字典排序的七种方法详解!
引言
我们经常在计算机等级考试中遇到词频排序的问题,我们一般先通过生成字典的方法,统计词的频次,然后给字典排序。
那么如何快速地给字典按照键值进行排序呢?下面介绍七种方法。第一种方法相对比较常见,但是第二种方法你可能第一次见,第三种方法是比较麻烦的一种,还有一些让步意想不到的几种方法供你参考。
例:有下面的列表dic={'a': 4, 'b': 3, 'c': 2, 'd': 1},如何实现字典的升序排列呢?
第一种方法:利用自定义函数lambda
1
2
3
|
>>> dic = { 'a' : 4 , 'b' : 3 , 'c' : 2 , 'd' : 1 } >>> sorted (dic.items(), key = lambda x: x[ 1 ]) [( 'd' , 1 ), ( 'c' , 2 ), ( 'b' , 3 ), ( 'a' , 4 )] |
这里,通过dic.items()获取由字典键名和键值组成的元组列表,然后通过自定义函数,获取元组的第2个元素,作为排序的依据即key, 默认是按照升序排列,如果是降序排列可以把reverse设为True,即:
1
2
3
|
>>> dic = { 'a' : 4 , 'b' : 3 , 'c' : 2 , 'd' : 1 } >>> sorted (dic.items(), key = lambda x: x[ 1 ],reverse = True ) { 'a' : 4 , 'b' : 3 , 'c' : 2 , 'd' : 1 } |
第二种方法:利用operator的方法
1
2
3
|
>>> import operator >>> sorted (dic.items(), key = operator.itemgetter( 1 )) [( 'd' , 1 ), ( 'c' , 2 ), ( 'b' , 3 ), ( 'a' , 4 )] |
1
2
|
operator. itemgetter(item) operator. itemgetter( * items) |
功能是返回一个可调用对象,该对象可以使用操作__getitem__()方法从自身的操作中捕获item。如果制定了多个items,返回一个由查询值组成的元组。例如:运行f =itemgetter(2),然后调用f(r),返回r[2]。这里通过operator获得了dic.items()中的键值。注意operator是内置的包,无需安装。
第三种方法:列表推导式法
1
2
3
4
5
6
7
|
>>> dic = { 'a' : 4 , 'b' : 3 , 'c' : 2 , 'd' : 1 } >>> tup = [(x[ 1 ],x[ 0 ]) for x in dic.items()] #元素互换位置 >>> sorted (tup) #排序 [( 1 , 'd' ), ( 2 , 'c' ), ( 3 , 'b' ), ( 4 , 'a' )] >>> [(x[ 1 ],x[ 0 ]) for x in dic.items()] >>> [(x[ 1 ],x[ 0 ]) for x in tup] #换回原来的位置 >>> [( 'd' , 1 ), ( 'c' , 2 ), ( 'b' , 3 ), ( 'a' , 4 )] |
用列表推导式,交换元组中元素的位置,排序后再交换回来,这种方法有点儿麻烦,但是逻辑清楚,适合新手。还有哪些好的方法,欢迎大家提出来,一起来交流。
第四种方法:用Counter的方法
1
2
3
4
|
from collections import Counter dic = { 'a' : 4 , 'b' : 3 , 'c' : 2 , 'd' : 1 } count = Counter(dic) print ( list (count.items())) |
第五种方法:利用pandas的方法
如果进行数据分析,可以把字典读取成数据框,然后采用pandas进行排序,效果也非常不错。
1
2
3
4
5
6
7
8
9
10
11
12
|
import pandas as pd dic = { 'a' : 4 , 'b' : 3 , 'c' : 2 , 'd' : 1 } df = pd.DataFrame.from_dict(dic, orient = 'index' ).reset_index() df.columns = [ 'key' , 'value' ] df_sorted = df.sort_values(by = 'value' ).reset_index(drop = True ) # 如果你想要得到一个排序后的字典 sorted_dic = dict ( zip (df_sorted[ 'key' ], df_sorted[ 'value' ])) print (sorted_dic) # 输出: {'d': 1, 'c': 2, 'b': 3, 'a': 4} |
第六种方法:自定义函数法
可以自定义一个函数,把字典和排序的方式作为参数传入,这样需要排序时就可以直接调用此函数来进行,可以简化代码,如下扭示:
1
2
3
4
5
6
7
8
9
|
def sort_dict_by_value(d, reverse = False ): return dict ( sorted (d.items(), key = lambda x: x[ 1 ], reverse = reverse)) dic = { 'a' : 4 , 'b' : 3 , 'c' : 2 , 'd' : 1 } sorted_dic = sort_dict_by_value(dic) sorted_dic_desc = sort_dict_by_value(dic, reverse = True ) print (sorted_dic_desc) # 输出: {'a': 4, 'b': 3, 'c': 2, 'd': 1} |
第七种方法:字典推导式法
字典推导式据有简单直接,运行速度快等特点,不需要导出其它的包,也不需要引用什么模块,排序效率非常的高,值得推荐。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
dic = { 'a' : 4 , 'b' : 3 , 'c' : 2 , 'd' : 1 } # 使用sorted()和字典推导式按值排序 sorted_dic = {k: v for k, v in sorted (dic.items(), key = lambda x: x[ 1 ])} print (sorted_dic) # 输出: {'d': 1, 'c': 2, 'b': 3, 'a': 4} # 如果需要降序 sorted_dic_desc = {k: v for k, v in sorted (dic.items(), key = lambda x: x[ 1 ], reverse = True )} print (sorted_dic_desc) # 输出: {'a': 4, 'b': 3, 'c': 2, 'd': 1} |
学后总结
以上七种方法殊途同归,都可以实现字典的排序,但是第一种方法是Python二级中采用的惯常作法,容易理解,请大家牢记忆。
counter和operator的方法也很简单,可以作为备用。积累常见的字典排序方法,可以帮助我们巩固基础知识,举一反三,深化理解。
到此这篇关于Python中给字典排序的七种方法详解的文章就介绍到这了。
学习资料见知识星球。
以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。
快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利!
更多技巧, www.excelbook.cn
欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;
1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需129元,即可下载本站文章涉及的文件和软件。