As briefly hinted in comments, the problem is that True == 1 and False == 0, and thus True is actually sorted after False. So if you put the keys in the "intuitive" order, you get this:
>>> s = 'sOrTiNg1234'
>>> sorted(s, key = lambda c: (c.islower(), c.isupper(), c.isdigit()))
['1', '2', '3', '4', 'O', 'T', 'N', 's', 'r', 'i', 'g']
This might become a bit clearer by having a look at the key tuples:
>>> [(c, map(int, (c.islower(), c.isupper(), c.isdigit()))) for c in s]
[('s', [1, 0, 0]),
('O', [0, 1, 0]),
('r', [1, 0, 0]),
('T', [0, 1, 0]),
('i', [1, 0, 0]),
('N', [0, 1, 0]),
('g', [1, 0, 0]),
('1', [0, 0, 1]),
('2', [0, 0, 1]),
('3', [0, 0, 1]),
('4', [0, 0, 1])]
You can fix this by using the reverse parameter:
>>> sorted(s, key = lambda c: (c.islower(), c.isupper(), c.isdigit()), reverse=True)
['s', 'r', 'i', 'g', 'O', 'T', 'N', '1', '2', '3', '4']
Or, as you did, by reversing the values in the key tuple:
>>> sorted(s, key = lambda c: (c.isdigit(), c.isupper(), c.islower()))
['s', 'r', 'i', 'g', 'O', 'T', 'N', '1', '2', '3', '4']
Or by negating the individual keys (not works, too):
sorted(s, key = lambda c: (-c.islower(), -c.isupper(), -c.isdigit()))
['s', 'r', 'i', 'g', 'O', 'T', 'N', '1', '2', '3', '4']
Also note that using lower and upper is actually redundant:
>>> sorted(s, key = lambda c: (c.isdigit(), c.isupper()))
['s', 'r', 'i', 'g', 'O', 'T', 'N', '1', '2', '3', '4']
And if you also want to sort by the character itself, add it at the end of the tuple:
>>> sorted(s, key = lambda c: (c.isdigit(), c.isupper(), c))
['g', 'i', 'r', 's', 'N', 'O', 'T', '1', '2', '3', '4']
False < True.True.