【4.9】python排序--sort()、reversed()、sorted()

一、python排序

1、reversed()

这个很好理解,reversed英文意思就是:adj. 颠倒的;相反的;(判决等)撤销的

print list(reversed(['dream','a','have','I']))
#['I', 'have', 'a', 'dream']

2、让人糊涂的sort()与sorted()

在Python 中sorted是内建函数(BIF),而sort()是列表类型的内建函数list.sort()。

sorted(iterable[, cmp[, key[, reverse]]])
#字符串排序使用是字典序,而非字母序
"""sorted()按照字典序排序"""
lis = ['a','c','z','E','T','C','b','A','Good','Tack']
print sorted(lis)   #['A', 'C', 'E', 'Good', 'T', 'Tack', 'a', 'b', 'c', 'z']

sort()
.sort([cmp[, key[, reverse]]])

a.sort() 已改变其结构,b = a.sort() 是错误的写法! 而 sorted(a, …)并没有改变a的结构。

二、python字典的排序

1、关于Python字典的一些特征

无序: 字典,形如 dic = {'a':1 , 'b':2 , 'c': 3} ,字典中的元素没有顺序,所以dic[0]是有语法错误的。 无重: 不可以有重复的键值,所以 dic.add[‘c’] = 4后,字典变成 {‘a’:1 , ‘b’:2 , ‘c’: 4}.

2、根据“键”或“键值”进行不同顺序的排序

函数原型:sorted(dic,value,reverse)
<strong>解释:</strong>dic为比较函数,value 为排序的对象(这里指键或键值),
reverse:注明升序还是降序,True--降序,False--升序(默认)

3、例子

dic = {'a':31, 'bc':5, 'c':3, 'asd':4, '33':56, 'd':0}

想把dic的value按照从大到小排序(value都是整数)。

dic = {'a':31, 'bc':5, 'c':3, 'asd':4, '33':56, 'd':0}
print sorted(dic.iteritems(), key=lambda d:d[1], reverse = False )  
#[('d', 0), ('c', 3), ('asd', 4), ('bc', 5), ('a', 31), ('33', 56)]

4.多重排序

先按Big后small排序

sort_lis = sorted(lis, key=lambda s:(s['Big'], s['small]))  
lis={"a1":{'Big':13,'small':21},"a2":{'Big':1,'small':21},"a3":{'Big':13,'small':23}}
print lis
aa=sorted(lis.items(),key=lambda (k,v):(v["Big"],v["small"]),reverse=False)
print aa

5.字典,按d[key][1] 排序

d = { 'a1': ['g',6],
 'a2': ['e',2],
 'a3': ['h',3],
 'a4': ['s',2],
 'a5': ['j',9],
 'a6': ['y',7] }

# L = sorted(d, key=lambda k:d[k][1])
# L = sorted(d, key=lambda k:d[k][0])
L = sorted(d.items(), key=lambda (k, v): v[1])

# L [('a2', ['e', 2]), ('a4', ['s', 2]), ('a3', ['h', 3]), ('a1', ['g', 6]), ('a6', ['y', 7]), ('a5', ['j', 9])]

# 获取排序后的key
map(lambda (k,v): k, L)
# ['a2', 'a4', 'a3', 'a1', 'a6', 'a5']

参考资料:

http://www.cnblogs.com/BeginMan/p/3193081.html

SAEPyblog:

个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn

Sam avatar
About Sam
专注生物信息 专注转化医学