プログラミングコンテストでは、アルファベットの大文字と小文字を区別せずに(例えば ‘A’ と ‘a’ を同じものとして扱う)文字列のリストをソートさせるような出題があります。これは、通常のソートに一手間かける必要がある、少し意地悪に感じる問題です。
 
 ここでは、casefold( ) を用いて、それを簡単に実現する方法を紹介します。

python3 で大文字・小文字の区別をすることなく文字列のリストをソート

 早速ですが、以下に mylist という文字列のリストを、大文字・小文字の区別をすることなくソートする例を紹介します。

mylist = ['AC', 'Aa', 'AB', 'Bac', 'BAd' ]

sorted_list = sorted(mylist, key=lambda s: s.casefold())

print(sorted_list)
# --> ['Aa', 'AB', 'AC', 'Bac', 'BAd']

 上記コードのポイントは、str.casefold() という関数を使用している部分です。
この関数では、すべての文字を小文字に変換しています。そのすべてが小文字化された文字列をkeyとして、ソートが実行されている訳です。

念のため、 str.casefold() を使用しない通常のソートを行った結果を以下に示します。

mylist = ['AC', 'Aa', 'AB', 'Bac', 'BAd' ]

sorted_list = sorted(mylist)

print(sorted_list)
# --> ['AB', 'AC', 'Aa', 'BAd', 'Bac']

通常のソートでは、大文字が優先されていることが分かります。