def sortBy(l, keyChain):
    if not keyChain:
        return l
result = []
f = keyChain[0]
for groupKey, group in groupby(sorted(l, key=f), key=f):
    sublist = [y for y in group]
if len(sublist) > 1:
    result += sortBy(sublist, keyChain[1:])
else:
    result += sublist
return result
Избегайте ненужных ключевых вычислений при сортировке списка