Python字典排序

系统 1453 0

利用引出一个例子来理解

例如:比如使用Python字典排序,d={'a':1,'c':3,'b':2}按值升序排列,我们可以用sorted高阶函数或者用列表的.sort()方法。下面具体阐述两种排序方法:

一、sorted高阶函数

            
              d={
              
                '
              
              
                a
              
              
                '
              
              :1,
              
                '
              
              
                c
              
              
                '
              
              :3,
              
                '
              
              
                b
              
              
                '
              
              :2}   
              
                #
              
              
                 首先建一个字典d
                
d.items() # d.items()返回的是: dict_items([('a', 1), ('c', 3), ('b', 2)])
d_result=sorted(d.items(),key= lambda x:x[1],reverse=False) # 按字典集合中,每一个元组的第二个元素排列。x相当于字典集合中遍历出来的一个元组。
print (d_result) # 得到:  [('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_result=sorted(d,key=lambda x:x[1],reverse=False), 要用 d_result=sorted(d.items(),key=lambda x:x[1],reverse=False)

  2. sorted函数排好序后,要绑定一个对象(赋值)

 例:d_result=sorted(d.items(),key=lambda x:x[1],reverse=False), 因为字典是无序类型,用sorted函数排好序后不绑定d_result,字典会自动打乱顺序。

 

二、列表的.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)] 。

      list()构造函数可以把 d.items()产生的dict_items键值对集合类型,直接变成列表。

 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,按从小到大的顺序排列。


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论