Есть похожие или даже одинаковые по начертанию, но совершенно разные по коду и порядку символы в юникоде.
Это часто вызывает проблемы.
Если вы точно знаете, что в ваших именах должны быть только русские буквы, то можете обработать строки заменяя похожие по начертанию символы. В таком виде, конечно, решение не пригодно в случае, если у вас попадётся имя полностью на английском.
Можно также проверять наличие непохожих по начертанию символов в имени, и если таковые есть, значит замены сделаны не по ошибке. Можно сделать автоматическую обратную подстановку, если в имени нет непохожих на английские русских букв.
В любом из этих случаев могут возникнуть ситуации некорректного трактования имени. К примеру к вам пришел "АВРААМ" и утверждает, что его родители большие затейники, русского не знают, к евреям отношения не имеют, а дома его называют "Абпаамом".
users = ["Андрей", "София", "Cветлана", "Валерий", "Илья", "Mаксим", "Дмитрий", "Лиза"]
trans_table = str.maketrans(
'ABCEHKMOPTXacekmopuxy',
'АВСЕНКМОРТХасекмориху',
)
russian_letters_normalizer = lambda s: s.translate(trans_table) if isinstance(s, str) else s
print('Original:', users)
print('Sorted: ', list(sorted(users, key=russian_letters_normalizer)))