Python:如何在数字主要排序中执行二级降序字母排序

Dis*_*ami 5 python sorting python-3.x

按两个标准对 Python 列表进行排序中, Fouad 给出了以下答案:

sorted(list, key=lambda x: (x[0], -x[1]))
Run Code Online (Sandbox Code Playgroud)

我想将以下列表主要按元组列表排序,主要按每个元素中的第二项按升序排列,然后按降序排列第一个(字母)项:

[('Ayoz', 1, 18, 7), ('Aidan', 2, 4, 9), ('Alan', 2, 4, 9), ('Arlan', 5, 6, 7), ('Luke', 15, 16, 2), ('Tariq', 5, 4, 2)] 
Run Code Online (Sandbox Code Playgroud)

给出答案:

[('Ayoz', 1, 18, 7), ('Alan', 2, 4, 9), ('Aidan', 2, 4, 9), ('Tariq', 5, 4, 2), ('Arlan', 5, 6, 7), ('Luke', 15, 16, 2)]
Run Code Online (Sandbox Code Playgroud)

如果可能,请使用上述方法。我试过

tlist = [('Ayoz', 1, 18, 7), ('Aidan', 2, 4, 9), ('Alan', 2, 4, 9), ('Arlan', 5, 6, 7), ('Luke', 15, 16, 2), ('Tariq', 5, 4, 2)]
sorted(tlist, key=lambda elem: (elem[1], -elem[0]))
Run Code Online (Sandbox Code Playgroud)

但这仅在 elem[0] 为数字时才有效(在这种情况下,它给出了 TypeError: bad operand type for unary -: 'str')

我将不胜感激任何帮助。Python 版本是 3.4

Dis*_*ami 2

tlist = [('Ayoz', 1, 18, 7), ('Alan', 2, 4, 9), ('Aidan', 2, 4, 9), ('Arlan', 5, 6, 7), ('Luke', 15, 16, 2), ('Tariq', 5, 4, 2)] 

sorted(tlist, key=lambda elem: (elem[1],sorted(elem[0],reverse=True)))
Run Code Online (Sandbox Code Playgroud)

解决了,但我花了半个小时才打字,所以无论如何我都要发帖。我仍然欢迎更好的方法。