因此,我需要根据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])) )