Classificação sem distinção entre maiúsculas e minúsculas, classificando a sequência no lugar , no Python 2 OR 3 (testado no Python 2.7.17 e Python 3.6.9):
>>> x = ["aa", "A", "bb", "B", "cc", "C"]
>>> x.sort()
>>> x
['A', 'B', 'C', 'aa', 'bb', 'cc']
>>> x.sort(key=str.lower) # <===== there it is!
>>> x
['A', 'aa', 'B', 'bb', 'C', 'cc']
A chave é key=str.lower
. Veja como esses comandos são apenas os comandos, para facilitar a cópia e colar para que você possa testá-los:
x = ["aa", "A", "bb", "B", "cc", "C"]
x.sort()
x
x.sort(key=str.lower)
x
Observe que, se suas strings forem unicode, no entanto (como u'some string'
), somente no Python 2 (não no Python 3 neste caso), o x.sort(key=str.lower)
comando acima falhará e emitirá o seguinte erro:
TypeError: descriptor 'lower' requires a 'str' object but received a 'unicode'
Se você receber esse erro, atualize para o Python 3, onde eles lidam com a classificação unicode, ou converta suas strings unicode em strings ASCII primeiro, usando uma compreensão de lista, como esta:
# for Python2, ensure all elements are ASCII (NOT unicode) strings first
x = [str(element) for element in x]
# for Python2, this sort will only work on ASCII (NOT unicode) strings
x.sort(key=str.lower)
Referências:
- https://docs.python.org/3/library/stdtypes.html#list.sort
- Converter uma string Unicode em uma string em Python (contendo símbolos extras)
- https://www.programiz.com/python-programming/list-comprehension