有序字典
在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]) """