我们知道Python的内置dictionary数据类型是无序的,通过key来获取对应的value。可是有时我们需要对dictionary中 的item进行排序输出,可能根据key,也可能根据value来排。到底有多少种方法可以实现对dictionary的内容进行排序输出呢?下面摘取了 一些精彩的解决办法。
python对容器内数据的排序有两种,一种是容器自己的sort函数,一种是内建的sorted函数。
sort函数和sorted函数唯一的不同是,sort是在容器内(in-place)排序,sorted生成一个新的排好序的容器。
1 按照Key值排序
#最简单的方法,这个是按照key值排序: defsortedDictValues1(adict): items=adict.items() items.sort() return[valueforkey,valueinitems] #又一个按照key值排序,貌似比上一个速度要快点 defsortedDictValues2(adict): keys=adict.keys() keys.sort() return[dict[key]forkeyinkeys] #还是按key值排序,据说更快。。。而且当key为tuple的时候照样适用 defsortedDictValues3(adict): keys=adict.keys() keys.sort() returnmap(adict.get,keys) #一行语句搞定: [(k,di[k])forkinsorted(di.keys())] #用sorted函数的key参数(func)排序: #按照key进行排序 printsorted(dict1.items(),key=lambdad:d[0])
#来一个根据value排序的,先把item的key和value交换位置放入一个list中,再根据list每个元素的第一个值,即原来的value值, 排序: defsort_by_value(d): items=d.items() backitems=[[v[1],v[0]]forvinitems] backitems.sort() return[backitems[i][1]foriinrange(0,len(backitems))] #还是一行搞定: [vforvinsorted(di.values())] #用lambda表达式来排序,更灵活: sorted(d.items(),lambdax,y:cmp(x[1],y[1])),或反序: sorted(d.items(),lambdax,y:cmp(x[1],y[1]),reverse=True) #用sorted函数的key参数(func)排序:#按照value进行排序 printsorted(dict1.items(),key=lambdad:d[1])原文来自:https://www.py.cn
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容