不区分大小写的列表排序,而不降低结果?

111 python sorting string list case-insensitive

我有一个像这样的字符串列表:

['Aden', 'abel']
Run Code Online (Sandbox Code Playgroud)

我想对项目进行排序,不区分大小写.所以我想得到:

['abel', 'Aden']
Run Code Online (Sandbox Code Playgroud)

但我得到的反面是,sorted()或者list.sort()因为大写字母出现在小写之前.

我怎么能忽略这个案子呢?我已经看到了涉及降低所有列表项的小写的解决方案,但我不想更改列表项的大小写.

小智 160

以下适用于Python 2:

sorted_list = sorted(unsorted_list, key=str.casefold)
Run Code Online (Sandbox Code Playgroud)

它适用于普通字符串和unicode字符串,因为它们都有str.casefold方法.

在Python 2中,它适用于普通字符串和unicode字符串的混合,因为这两种类型的值可以相互比较.但是Python 3不能像这样工作:你无法比较字节字符串和unicode字符串,所以在Python 3中你应该做的是理智的事情,只对一种字符串的列表进行排序.

sorted_list = sorted(unsorted_list, key=lambda s: s.lower())
Run Code Online (Sandbox Code Playgroud)

从python 3.3开始,还有lower()一种专为无壳匹配而设计的方法,可用于代替lower:

>>> lst = ['Aden', u'abe1']
>>> sorted(lst)
['Aden', u'abe1']
>>> sorted(lst, key=lambda s: s.lower())
[u'abe1', 'Aden']
Run Code Online (Sandbox Code Playgroud)

  • 人们可以通过__(Python 3中)避免lambda函数往返__使用一般[`str.lower`](https://docs.python.org/3/library/stdtypes.html#str.lower)函数为'排序(LST,键= str.lower)`或__(Python的2)__使用[的`string`模块`lower`方法](https://docs.python.org/2/library/string.html #string.lower)为`sorted(lst,key = string.lower)`.人们也可以在Python 2使用`字符串str.lower`,但随后必须使用``为对象unicode` unicode.lower`,而`string.lower`同时接受(正如你所说的那样,可能是虽然不是真正的"理智"操作模式. (9认同)

jam*_*lak 44

>>> x = ['Aden', 'abel']
>>> sorted(x, key=str.lower) # Or unicode.lower if all items are unicode
['abel', 'Aden']
Run Code Online (Sandbox Code Playgroud)

在Python 3 str是unicode的,但在Python 2,你可以使用这里面既适用于更通用的方法strunicode:

>>> sorted(x, key=lambda s: s.lower())
['abel', 'Aden']
Run Code Online (Sandbox Code Playgroud)


Ash*_*ary 9

你也可以试试这个:

>>> x = ['Aden', 'abel']
>>> x.sort(key=lambda y: y.lower())
>>> x
['abel', 'Aden']
Run Code Online (Sandbox Code Playgroud)


小智 6

这适用于 Python 3,并且不涉及小写结果 (!)。

values.sort(key=str.lower)
Run Code Online (Sandbox Code Playgroud)