按字典顺序python排序字​​符串

时间:2011-09-10 13:17:22

标签: python sorting lambda

我想按字典顺序将字符串排序为列表

str='aAaBbcCdE'

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

但是sorted()给了我这个输出:

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

如何按字典顺序排序?

6 个答案:

答案 0 :(得分:31)

当有内置的lambda函数时,不要使用lambda函数。也永远不要使用排序的cmp参数,因为它已被弃用:

sorted(s, key=str.lower)

sorted(s, key=str.upper)

但这可能无法保持'A'和'a'的顺序,所以:

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

这将是sorted的性质,对于几乎排序的列表(第二个sorted),操作将非常快。

答案 1 :(得分:11)

您可以使用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本身会断开关系(使A }来a)。

答案 2 :(得分:4)

cmp是这样做的旧方式,现在已被弃用,但对于后代:

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

答案 3 :(得分:0)

data = input() data=list(data) data.sort()

现在变量"数据"将提供按字典顺序排序的输入。

答案 4 :(得分:0)

使用natsort库。 比使用stackoverflow代码解决方案更好地使用库。 (仅在SO中读取)

答案 5 :(得分:0)

如果您不处理简单字符串的集合,但仍想按自然排序顺序而不是字典顺序排序:

假设您有一组对象实例,您希望按特定属性对其进行排序,并且属性值可以以大写或小写开头,那么您可以执行以下操作:

sorted(objects, lambda object: object.attr1.lower())

假设 attr1 是字符串类型。为什么这样做?因为您将所有排序键转换为相同的大小写以进行排序,从而打败了字典排序。不使用lower() 或upper() 将导致字典排序顺序而不是自然的字母排序顺序。