在Python中按字典序排序字符串

31 投票
6 回答
62710 浏览
提问于 2025-04-17 01:58

我想把一个字符串按照字典顺序排序成一个列表,像这样:

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)。

撰写回答