Похоже, что вы хотите str.islower
:
d.sort(key=lambda s: (not s.islower(), s))
print(d)
# ['abc', 'badad1', 'AAab', 'Ejc']
При вашем текущем подходе вы просто опускали все строки в нижний регистр, поэтому вы просто сортировали их в алфавитном порядке.
Теперь вместо этого вы сортируете по результату логических значений, возвращаемых islower
, и самим строкам (что, как вам кажется):
[(not s.islower(), s) for s in d]
# [(True, 'AAab'), (False, 'abc'), (True, 'Ejc'), (False, 'badad1')]