It's easy enough to write my own:
def max_with_key(seq, key=None):
# annoying that the built-in "max" won't do this for us
if not seq:
raise ValueError("max_with_key() arg is an empty sequence")
if key is None:
key = lambda x: x
so_far = None
for elt in seq:
v = key(elt)
if so_far is None or v > so_far[1]:
so_far = (elt, v)
return so_far
... but I feel like a chump having to do so.