按照字典排序,


按照字典的value排序,类似sort -k命令

import operator


x = {1:2,3:4, 4:3, 2:1, 0:0}

sorted x =sorted(x.iteritems(),

key = operator.itemgetter(1))

0表示根据key排序,1表示根据value排序

In[33]:sorted(x.iteritems(),key=operator.itemgetter(0))Out[33]:[(0,0),(1,2),(3,4),(4,3),('1',2)]In[34]:sorted(x.iteritems(),key=operator.itemgetter(1))Out[34]:[(0,0),(1,2),('1',2),(4,3),(3,4)]


reverse默认为false,everse=True表示倒序排列

sorted_y = sorted(x.iteritems(),

key=operator.itemgetter(1),reverse=True)

In[35]:sorted(x.iteritems(),key=operator.itemgetter(1),reverse=True)Out[35]:[(3,4),(4,3),(1,2),('1',2),(0,0)]



例子:找出占用空间大的文件

os.walk #对目录遍历

os.path.getsize #获取文件的大小

dict sort(top10)

#!/usr/bin/envpython#ecoding=utf8importosimportsysimportoperatordefgen_dic(topdir):dic={}a=os.walk(topdir)forp,d,fina:foriinf:fn=os.path.join(p,i)f_size=os.path.getsize(fn)dic[fn]=f_sizereturndicif__name__=='__main__':dic=gen_dic(sys.argv[1])#生成一个字典,显示argv[1]目录的文件和文件大小sorted_dic=sorted(dic.iteritems(),key=operator.itemgetter(1),reverse=True)printsorted_dic[root@133systeminformation]#pwd/opt/python/systeminformation[root@133systeminformation]#ll总用量32-rw-r--r--1rootroot42712月214:581_md5.py-rw-r--r--1rootroot45312月216:481_walk.py-rw-r--r--1rootroot42510月2405:57hashlib2.pydrwxr-xr-x2rootroot409610月2406:03test-rw-r--r--1rootroot52712月616:00top10.py-rw-r--r--1rootroot43010月2521:56walk1.py-rw-r--r--1rootroot12810月2518:07yield1.py-rw-r--r--1rootroot68010月2521:27yield2.py[root@133systeminformation]#pythontop10.py.#打印当前目录下文件,根据大小排序[('./yield2.py',680),('./top10.py',527),('./1_walk.py',453),('./walk1.py',430),('./1_md5.py',427),('./hashlib2.py',425),('./yield1.py',128),('./test/b',0),('./test/a',0)]



[root@133systeminformation]#vimtop10.py#!/usr/bin/envpython#ecoding=utf8importosimportsysimportoperatordefgen_dic(topdir):dic={}a=os.walk(topdir)forp,d,fina:foriinf:fn=os.path.join(p,i)f_size=os.path.getsize(fn)dic[fn]=f_sizereturndicif__name__=='__main__':dic=gen_dic(sys.argv[1])#生成一个字典,显示argv[1]目录的文件和文件大小sorted_dic=sorted(dic.iteritems(),key=operator.itemgetter(1),reverse=True)fork,vinsorted_dic[:10]:#只显示0-9的大小占前10的文件printk,v[root@133systeminformation]#pythontop10.py../yield2.py680./top10.py556./1_walk.py453./walk1.py430./1_md5.py427./hashlib2.py425./yield1.py128./test/b0./test/a0