1. 程式人生 > >python學習--根據字典中的值的大小,對字典的項進行排序。

python學習--根據字典中的值的大小,對字典的項進行排序。

比較 value 函數返回值 randint for python common spa pri

首先生成一個隨機字典:

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從大到小排序:
from collections import Counter
d={x:randint(60,99) for x in "abcdefg"}
c=Counter(d).most_common() #返回一個列表,按照dict的value從大到小排序[(‘b‘, 99), (‘g‘, 89), (‘d‘, 74), (‘e‘, 69), (‘a‘, 66), (‘c‘, 62), (‘f‘, 60)]

print(c)

第二種方式,從小到大排序.總體思路:sorted函數可以對列表[]進行從小到大排序,對於字典{}dict,sorted函數只比較dict的key進行排序,所以要對dict進行調整變形。
    1、利用zip函數把dict轉換成一個列表,列表中每個元素都是一個tuple,tuple大小比較原理是,先比較第一個元素,第一個相同在比較第二個。
    2、利用sorted函數對轉換後的列表進行排序。
z=zip(d.values(),d.keys()) #[(62, ‘a‘), (74, ‘b‘), (83, ‘c‘), (96, ‘d‘), (75, ‘e‘), (79, ‘f‘), (83, ‘g‘)],然後對這個列表進行sorted排序

sorted(z)

第三種方式:[(a1,b1,c1),(a2,b2,c2),(a3,b3,c3),(a4,b4,c4)……] 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]).
 

python學習--根據字典中的值的大小,對字典的項進行排序。