1、按“值”排序
按“值”排序就是根据字典的值进行排序,可以使用内置的sorted()函数。
sorted(iterable[, cmp[, key[, reverse]]])
(1)iterable:是可迭代类型类型;
(2)cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;
(3)key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;
(4)reverse:排序规则. reverse = True 或者 reverse = False,有默认值,默认为升序排列(False)。
返回值:是一个经过排序的可迭代类型,与iterable一样。一般来说,cmp和key可以使用lambda表达式。
如果对字典进行排序,常用的形式如下:sorted(dict.items(), key=lambda e:e[1], reverse=True), 其中e表示dict.items()中的一个元素,e[1]则表示按 值排序如果把e[1]改成e[0],那么则是按键排序,reverse=False可以省略,默认为升序排列。
说明:字典的items()函数返回的是一个列表,列表的每个元素是一个键和值组成的元组。因此,sorted(dict.items(), key=lambda e:e[1], reverse=True)返回的值同样是由元组组成的列表。
2、按“键”排序
对字典进行按键排序也可以使用上面的sorted函数,只要改为sorted(dict.items(), key=lambda e:e[0], reverse=True)就可以了。
更多内容请参考博客:python 字典排序
我这里仅仅是想说明以下的问题,就不全部写了
【注意】
排序后的字典不再是字典,一个字典排序后就会变成一个list,这是大家一定要注意的地方。
这个list由二维元组组成,(键,值)这样的形式,所以要提取这个list中的元素的时候一定要按照List的方式去提取,千万不要按照dict的方式去提取,否则会出错。
我自己的一个例子:
【注】我要读取的这个文件每行都有一句话,很简单仅此而已。我想把这个文件读取出来,然后加序号,排序,输出即可。
contents = {}
fp = open("f:\emotion\mysite\weibo_crawler\chinese_weibo.txt", "r")
index = 1
for content in fp.readlines():
contents[index] = content
nums.append(index)
index = index + 1
new_contents = sorted(contents.items(),key=lambda e:e[0],reverse=False) #排序
for key,value in new_contents:
print key,value
fp.close()
此处要注意,我的未排序的字典的键是“1,2,3,4,5…”,这些都是数字,所以排序的时候按照数字来排序。
如果你的字典的键是”1,2,3,4,5,6…”但是你的是字符串,那么排序的情况是按照字符串来排序。顺序是
[1,10,11,12,13,14,15,16,17,18,19,2,21,22,23,24,25,26,27,28,29,3,31,32,33,34]
所以请大家一定要注意
排序的时候你的键是字符串还是数字你自己一定要清楚,否则可能程序不会按照你的预想去运行然后你还不知道。