python創建有序字典及字典按照值的大小進行排序


有序字典

  在Python中,字典類型里面的元素默認是無序的,但是我們也可以通過collections模塊創建有序字典

# -*- coding:utf-8 -*-
# python有序字典需導入模塊collections
import collections
# 通過OrderedDict類創建的字典是有序的
dic = collections.OrderedDict()
dic['k1'] = 'v1'
dic['k2'] = 'v2'
dic['k3'] = 'v3'
print(dic)
 
"""
    類似通過列表的方式來實現字典有序
    創建列表,添加列表元素k1時,再將k1作為字典的鍵,
    因為列表是序的,所以遍歷列表就可有序的遍歷出字典所有的key
"""
dic = {'K1': 'V1', 'K2': 'V2', 'K3': 'V3'}
li = ['k1', 'k2', 'k3']

 

字典排序(按照值的大小)

  首先我們生成一個隨機字典

from random import randint
d={x:randint(60,99) for x in "abcdefg"}   # {'a': 62, 'b': 97, 'c': 87, 'd': 68, 'e': 91, 'f': 76, 'g': 88}

 

第一種方式:利用collections的子類Counter從大到小排序

c=Counter(d).most_common() #返回一個列表,按照dict的value從大到小排序
print(c)# 返回值是一個list,list里面的元素是tuple的形式

 

第二種方式:sorted函數

  可以對列表[]進行從小到大排序,對於字典{}dict,sorted函數默認只按照dict的key進行排序,所以要對dict進行調整變形。

  1、利用zip函數把dict轉換成一個列表,列表中每個元素都是一個tuple,tuple大小比較原理是,先比較第一個元素,第一個相同在比較第二個。

  2、利用sorted函數對轉換后的列表進行排序。

z=zip(d.values(),d.keys())   #[(62, 'a'), (97, 'b'), (87, 'c'), (68, 'd'), (91, 'e'), (76, 'f'), (88, 'g')],然后對這個列表進行sorted排序
sorted(z)

 

第三種方式:sorted + lambda

  sorted函數可以這種集合進行指定元素排序。 

sorted(d.items(),key=lambda x:x[1])
"""
第一個參數是需要排序的列表,第二個參數是指定key(列表中每一項的第幾個元素)來進行排序。 
解釋這句代碼:d.items()返回的是一個列表 [('a', 74), ('b', 90), ('c', 84), ('d', 85), ('e', 64), ('f', 66), ('g', 88)] 
sorted會對d.items()這個list進行遍歷,把list中的每一個元素,也就是每一個tuple()當做x傳入匿名函數lambda x:x[1],函數返回值為x[1], 
也就是key=x[1]=tuple()[1]=('a', 74)[1],也就是說按照里表中每個項的第二個元素進行排序(第一個是想x[0])
"""

 

        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM