按长度对字符串列表进行排序,然后按字母顺序反转,然后按第二个字母(3个标准)Python进行排序



因此,我需要根据3个标准对名称列表进行排序:长度优先(从最长到最短(,然后按字母顺序(相反(,最后按第二个字母的字母顺序。

我已经读了很多问题/答案,但没有一个能帮助我解决第三把钥匙的问题。

示例:

['Jac', 'Lily', 'Lucy'] 

成为

['Lily', 'Lucy', 'Jac']

到目前为止,我拥有的是:

lst = ['Jac', 'Lily', 'Lucy']

sorted(lst, key=lambda x: (len(x), x), reverse = True)

这给了我

['Lucy', 'Lily', 'Jac']

我也试过:

sorted(sorted(lst, key=lambda x: (len(x), x), reverse = True), key=lambda l: l[1])

但这给了我

['Jac', 'Lily', 'Lucy']

我现在可以添加什么来按第二个字母对前两个名字进行排序?

您所要求的有点奇怪,您希望保持按字母顺序排列,而不需要再次进行排序。所以,你想要";反字母">第二项除外。所以,我担心像这个怪物一样的事情将不得不做:

sorted(lst, key=lambda x: (len(x), (x[:1], -ord(x[1]), x[1:])), reverse=True)

以下对我有效:

lst = sorted(lst, key=lambda x: (-len(x), -ord(x[0]), ord(x[1])) )

最新更新