Aquí hay un truco absoluto que resuelve el problema de una manera mala pero inteligente: Python miny las maxfunciones se pueden usar con una keyfunción que se usa para comparar elementos, de modo que devuelva el elemento minimizando o maximizando esa función. Si la keyfunción devuelve una tupla, el primer componente de la tupla determina el orden, utilizando el segundo componente como un desempate.
Podemos explotar el hecho de que los últimos caracteres 'd', 'h'y 'm'se pueden comparar en orden alfabético; un d ay es más largo que una hora nuestra es más largo que un m inute. Esto significa que la duración más larga tiene el carácter mínimo en orden alfabético, con el número entero máximo como un desempate. Maximizar ese entero es lo mismo que minimizar su negación:
>>> durations = ['5d', '20h', '1h', '7m', '14d', '1m']
>>> min(durations, key=lambda d: (d[-1], -int(d[:-1])))
'14d'