在Python中按字典序排序字符串
我想把一个字符串按照字典顺序排序成一个列表,像这样:
str='aAaBbcCdE'
变成
['A','a','a','B','b','C','c','d','E']
但是用 sorted()
函数得到的结果是:
['A','B','C','E','a','a','b','c','d']
我该怎么做才能按字典顺序排序呢?
6 个回答
4
cmp
是以前用来做这个的老方法,现在已经不推荐使用了,不过为了记录在案,还是提一下:
s='aAaBbcCdE'
sorted(s, lambda x,y: cmp(x.lower(), y.lower()) or cmp(x,y))
17
你可以用一个二元组来作为键:
text='aAaBbcCdE'
sorted(text, key=lambda x: (str.lower(x), x))
# ['A', 'a', 'a', 'B', 'b', 'C', 'c', 'd', 'E']
这个二元组的第一个元素,str.lower(x)
是主要的键(这样 a
就会排在 B
前面),而 x
本身则用来解决相同情况(这样 A
就会排在 a
前面)。
41
当有内置函数可以完成任务时,不要使用lambda函数。此外,永远不要使用sorted的cmp
参数,因为它已经不推荐使用了:
sorted(s, key=str.lower)
或者
sorted(s, key=str.upper)
但这样可能无法保持'A'和'a'的顺序,所以:
sorted(sorted(s), key=str.upper)
这样做可以保持顺序,并且由于sorted
的特性,对于几乎已经排序好的列表,这个操作会非常快(第二个sorted
)。