在Python中字典按值排序的实现方法

一、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 字典按值排序内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python实现字典的遍历与排序功能示例

    本文实例讲述了Python实现字典的遍历与排序功能.分享给大家供大家参考,具体如下: 字典的遍历: 首先: items(): 功能:以列表的形式返回字典键值对 eg: dict_={"a":2,"b":3,"c":6} dict_.items() >>>[('a',2),('b',3),('c',6)] iteritems(): 功能:以迭代器对象返回字典键值对 # -*- coding: cp936 -*- dict1={'a

  • python 字典(dict)按键和值排序

    python 字典(dict)的特点就是无序的,按照键(key)来提取相应值(value),如果我们需要字典按值排序的话,那可以用下面的方法来进行: 1 下面的是按照value的值从大到小的顺序来排序. dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0} dict= sorted(dic.items(), key=lambda d:d[1], reverse = True) print(dict) 输出的结果: [('aa', 74),

  • Python实现字典排序、按照list中字典的某个key排序的方法示例

    本文实例讲述了Python实现字典排序.按照list中字典的某个key排序的方法.分享给大家供大家参考,具体如下: 1.给字典按照value按照从大到小排序 排序 dict = {'a':21, 'b':5, 'c':3, 'd':54, 'e':74, 'f':0} new_dict = sorted(dict.iteritems(), key=lambda d:d[1], reverse = True) print new_dict 输出: [('e', 74), ('d', 54), ('

  • python字典多条件排序方法实例

    项目编写过程中,总能遇见对字典进行排序什么的,如果要实现多条件排序只需要下面几行代码实现.充分体现了python的好处了. 复制代码 代码如下: teamitems = [{'team':'France'     , 'P':1 , 'GD':-3 , 'GS':1 , 'GA':4},             {'team':'Uruguay'     , 'P':7 , 'GD':4  , 'GS':4 , 'GA':0},             {'team':'SouthAfrica'

  • python字典排序实例详解

    本文实例分析了python字典排序的方法.分享给大家供大家参考.具体如下: 1. 准备知识: 在python里,字典dictionary是内置的数据类型,是个无序的存储结构,每一元素是key-value对: 如:dict = {'username':'password','database':'master'},其中'username'和'database'是key,而'password'和'master'是value,可以通过d[key]获得对应值value的引用,但是不能通过value得到k

  • python字典排序的方法

    python字典怎么排序? 定义一个字典类型 mydict = {2: '小路', 3: '黎明', 1: '郭富城', 4:'周董'} 可分别打印 key和value 看一下数据 按KEY排序,使用了 lambda和 reverse= False(正序) key和value都输出 reverse= True(逆序) 按value排序,汉字次序不是按拼音输出 sorted并不改变字典本身的数据次序. 输出后为列表和元组 可以 A = sorted(mydict.items(),key = lam

  • python对字典进行排序实例

    本文实例讲述了python对字典进行排序的方法,是非常实用的技巧.分享给大家供大家参考. 具体实现方法如下: import itertools thekeys = ['b','a','c'] thevalues = ['bbb','aaa','cccc'] d = dict(itertools.izip(thekeys,thevalues)) #创建字典 print d def sortedDictValue(adict): keys = adict.keys() keys.sort() ret

  • python字典值排序并取出前n个key值的方法

    今天在写一个算法的过程中,得到了一个类似下面的字典: {'user1':0.456,'user2':0.999,'user3':0.789,user:'0.234'} 想要获取字典里value值前3的key,就产生了如下代码 直接贴代码: def order_dict(dicts, n): result = [] result1 = [] p = sorted([(k, v) for k, v in dicts.items()], reverse=True) s = set() for i in

  • 在Python中字典按值排序的实现方法

    一.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'

  • python中字典按键或键值排序的实现代码

    字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序.Python中字典的排序分为按"键"排序和按"值"排序. 按"值"排序 按"值"排序就是根据字典的值进行排序,可以使用内置的sorted()函数. sorted(iterable[, cmp[, key[, reverse]]]) iterable:是可迭代类型类型; cmp:用于比较的

  • Python编程对列表中字典元素进行排序的方法详解

    本文实例讲述了Python编程对列表中字典元素进行排序的方法.分享给大家供大家参考,具体如下: 内容目录: 1. 问题起源 2. 对列表中的字典元素排序 3. 对json进行比较(忽略列表中字典的顺序) 一.问题起源 json对象a,b a = '{"ROAD": [{"id": 123}, {"name": "no1"}]}' b = '{"ROAD": [{"name": "

  • Python中字典(dict)和列表(list)的排序方法实例

    一.对列表(list)进行排序 推荐的排序方式是使用内建的sort()方法,速度最快而且属于稳定排序 复制代码 代码如下: >>> a = [1,9,3,7,2,0,5]>>> a.sort()>>> print a[0, 1, 2, 3, 5, 7, 9]>>> a.sort(reverse=True)>>> print a[9, 7, 5, 3, 2, 1, 0]>>> b = ['e','a'

  • 浅谈python中字典append 到list 后值的改变问题

    看一个例子 d={'test':1} d_test=d d_test['test']=2 print d 如果你在命令行实践的话,会发现你改动的是d_test ,但是d 也跟着改变了. 通常这和我们期待的不一样. Why? 因为字典d 是一个object ,而d_test=d并没有真正的将该字典在内存中再次创建.只是指向了相同的object.这也是python 提高性能,优化内存的考虑. 实际场景 d={"name":""} l=[] for i in xrange

  • 详解如何修改python中字典的键和值

    我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a'] = 1 t['b'] = 2 # 修改字典的值 print('未修改前:', t) t['b'] = 3 print('修改后: ', t) # 修改字典的键 print('-' * 30) print('未修改前:', t) t['c'] = t.pop('a') print('修改后: '

  • 详解python中字典的循环遍历的两种方式

    开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python3中,下面两种方法都是通用的. 1. 只对键的遍历 一个简单的for语句就能循环字典的所有键,就像处理序列一样: d = {'name1' : 'pythontab', 'name2' : '.', 'name3' : 'com'} for key in d: print (key, ' value

  • python嵌套字典比较值与取值的实现示例

    前言 本文通过示例给大家介绍了python嵌套字典比较值,取值,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 示例代码 #取值import types allGuests = {'Alice': {'apples': 5, 'pretzels': {'12':{'beijing':456}}}, 'Bob': {'ham sandwiches': 3, 'apple': 2}, 'Carol': {'cups': 3, 'apple pies': 1}} def dictge

  • Python合并字典键值并去除重复元素的实例

    假设在python中有一字典如下: x={'a':'1,2,3', 'b':'2,3,4'} 需要合并为: x={'c':'1,2,3,4'} 需要做到三件事: 1. 将字符串转化为数值列表 2. 合并两个列表并添加新的键值 3. 去除重复元素 第1步通过常用的函数eval()就可以做到了,第2步需要添加一个键值并添加元素,第3步利用set集合的性质可以达到去重的效果,不过最后需要再将set集合转化为list列表.代码如下: x={'a':'1,2,3','b':'2,3,4'} x['c']=

  • Python实现字典依据value排序

    具体内容如下: 使用sorted将字典按照其value大小排序 >>> record = {'a':89, 'b':86, 'c':99, 'd':100} >>> sorted(record.items(), key=lambda x:x[1]) [('b', 86), ('a', 89), ('c', 99), ('d', 100)] sorted第一个参数要可迭代,可以为tuple, list >>> items = [(1, 'B'), (1,

随机推荐