It is simple, just use -ord
for your strings:
L.sort(key=lambda k: (-ord(k[0]), k[1]), reverse=True)
Output:
In [1]: L = [['a',1], ['a',2], ['a',3], ['b',1], ['b',2], ['b',3]]
In [2]: L.sort(key=lambda k: (-ord(k[0]), k[1]), reverse=True)
In [3]: L
Out[3]: [['a', 3], ['a', 2], ['a', 1], ['b', 3], ['b', 2], ['b', 1]]
You can get the exact same result by not using reverse and negating the int values:
L = [['a',1], ['a',2], ['a',3], ['b',1], ['b',2], ['b',3]]
L.sort(key=lambda k: (k[0], -k[1]))
print(L)
[['a', 3], ['a', 2], ['a', 1], ['b', 3], ['b', 2], ['b', 1]]
So for a mixture of strings and ints you don't actually need cmp, ord or anything other negating the int values.