Aqui está um truque absoluto que resolve o problema de uma maneira ruim, mas inteligente: o Python mine as maxfunções podem ser usadas com uma keyfunção usada para comparar elementos, para que ele retorne o elemento, minimizando ou maximizando essa função. Se a keyfunção retornar uma tupla, a ordem será determinada pelo primeiro componente da tupla, usando o segundo componente como desempatador.
Podemos explorar o fato de que o último caracteres 'd', 'h'e 'm'pode ser comparado em ordem alfabética; um d ay é mais longo do que um h a é mais do que um m inute. Isso significa que a duração mais longa tem o caractere mínimo em ordem alfabética, com o número inteiro máximo como desempate. Maximizar esse número inteiro é o mesmo que minimizar sua negação:
>>> durations = ['5d', '20h', '1h', '7m', '14d', '1m']
>>> min(durations, key=lambda d: (d[-1], -int(d[:-1])))
'14d'