Tri insensible à la casse, tri de la chaîne en place , en Python 2 OU 3 (testé en Python 2.7.17 et 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']
La clé est key=str.lower
. Voici à quoi ressemblent ces commandes avec seulement les commandes, pour un copier-coller facile afin que vous puissiez les tester:
x = ["aa", "A", "bb", "B", "cc", "C"]
x.sort()
x
x.sort(key=str.lower)
x
Notez que si vos chaînes sont des chaînes Unicode, cependant (comme u'some string'
), alors en Python 2 uniquement (PAS en Python 3 dans ce cas) la x.sort(key=str.lower)
commande ci-dessus échouera et produira l'erreur suivante:
TypeError: descriptor 'lower' requires a 'str' object but received a 'unicode'
Si vous obtenez cette erreur, mettez à niveau vers Python 3 où ils gèrent le tri Unicode, ou convertissez d'abord vos chaînes Unicode en chaînes ASCII, en utilisant une compréhension de liste, comme ceci:
# 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)
Références:
- https://docs.python.org/3/library/stdtypes.html#list.sort
- Convertir une chaîne Unicode en chaîne en Python (contenant des symboles supplémentaires)
- https://www.programiz.com/python-programming/list-comprehension