2011-09-10 114 views
17

我想一个字符串在字典顺序列表作为排序字母排序,Python中的字符串

str='aAaBbcCdE' 

排序,

['A','a','a','B','b','C','c','d','E'] 

sorted()给了我这样的输出:

['A','B','C','E','a','a','b','c','d'] 

如何按字典顺序排序?

+2

已弃用且* slow *。 –

回答

23

不要使用lambda函数时,有作业内建的。也从来没有使用的排序cmp参数,因为它已过时:

sorted(s, key=str.lower) 

sorted(s, key=str.upper) 

但事实可能并非保持 'A' 和 'A' 的顺序,因此:

sorted(sorted(s), key=str.upper) 

这将和sorted的性质几乎排序列表(第二sorted)的操作将非常快。

+0

好的解决方案非常感谢 –

4

cmp是这样,现在已经过时的老办法,但为后人:

s='aAaBbcCdE' 
sorted(s, lambda x,y: cmp(x.lower(), y.lower()) or cmp(x,y)) 
+0

不保持订单! –

+0

你是什么意思? '['A','a','a','B','b','C','c','d','E']' –

+0

对不起,很多.. –

9

你可以使用一个2元组的关键:

text='aAaBbcCdE' 
sorted(text,key=lambda x:(str.lower(x),x)) 
# ['A', 'a', 'a', 'B', 'b', 'C', 'c', 'd', 'E'] 

元组中的第一个元素,str.lower(x)是(使aB之前)的主键,而x本身打破联系(使Aa之前)。