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]) """