Not looking for a work around. Looking to understand why Python sorts this way.
>>> a = ['aaa','Bbb']
>>> a.sort()
>>> print(a)
['Bbb', 'aaa']
>>> a = ['aaa','bbb']
>>> a.sort()
>>> print(a)
['aaa', 'bbb']
Case-insensitive Sorting By default, the sort() method sorts the list in ASCIIbetical order rather than actual alphabetical order. This means uppercase letters come before lowercase letters.
sort() method sorts the elements of a list in ascending or descending order using the default < comparisons operator between items. Use the key parameter to pass the function name to be used for comparison instead of the default < operator. Set the reverse parameter to True, to get the list in descending order.
Since the name is a string , Python by default sorts it using the alphabetical order. For the second case, age ( int ) is returned and is sorted in ascending order. For the third case, the function returns the salary ( int ), and is sorted in the descending order using reverse = True .
To convert any character into uppercase in Python, we use the built-in upper() function. Python upper() function is an inbuilt string class method that converts all the lowercase characters in the string into uppercase characters and returns a new string.
This is because upper case chars have an ASCII value lower than that of lower case. And hence if we sort them in increasing order, the upper case will come before the lower case
A
is 65a
is 9765<97
And hence A < a
if you sort in increasing order
str
is sorted based on the raw byte values (Python 2) or Unicode ordinal values (Python 3); in ASCII and Unicode, all capital letters have lower values than all lowercase letters, so they sort before them:
>>> ord('A'), ord('Z')
(65, 90)
>>> ord('a'), ord('z')
(97, 112)
Some locales (e.g. en_US
) will change this sort ordering; if you pass locale.strxfrm
as the key
function, you'll get case-insensitive sorts on those locales, e.g.
>>> import locale
>>> locale.setlocale(locale.LC_COLLATE, 'en_US.utf-8')
>>> a.sort(key=locale.strxfrm)
>>> a
['aaa', 'Bbb']
Python treats uppercase letters as lower than lowercase letters. If you want to sort ignoring the case sensitivity. You can do something like this:
a = ['aaa','Bbb']
a.sort(key=str.lower)
print(a)
Outputs:
['aaa', 'Bbb']
Which ignores the case sensitivity. The key parameter "str.lower" is what allows you to do this. The following documentation should help. https://docs.python.org/3/howto/sorting.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With