Python 使用两个键对列表进行排序

Python 使用两个键对列表进行排序,python,list,python-2.7,sorting,lambda,Python,List,Python 2.7,Sorting,Lambda,我有一个字符串列表,我希望根据给定字符串中的点数(.)进行排序,如果这些字符串中的点数相等,我希望它们按照长度进行排序。(两者都按降序排列应该不会有问题) 第一部分很容易实现 given_list.sort(key=dots,reverse=True) 实现了dots函数,运行良好 这就是我被卡住的地方,因为如果点数相等,我无法根据已经排序的列表的长度对其进行排序 这让我觉得我应该使用lambda定制关键参数,但它并没有真正发挥应有的作用,但在嵌套列表或字典的情况下确实如此 如何完成此操作?您

我有一个字符串列表,我希望根据给定字符串中的点数(.)进行排序,如果这些字符串中的点数相等,我希望它们按照长度进行排序。(两者都按降序排列应该不会有问题)

第一部分很容易实现

given_list.sort(key=dots,reverse=True)
实现了dots函数,运行良好

这就是我被卡住的地方,因为如果点数相等,我无法根据已经排序的列表的长度对其进行排序

这让我觉得我应该使用lambda定制关键参数,但它并没有真正发挥应有的作用,但在嵌套列表或字典的情况下确实如此


如何完成此操作?

您可以将自定义lambda函数作为排序键传递给排序方法

在本例中,我使用一个
lambda x:(x.count(“.”),len(x))
,它将创建一个count和length的复合键,并相应地排序:

>>> given_list = ["e.x.a", "m.p.l.e", "ex.am.ple"]
>>> sorted(given_list, key=lambda x: (x.count("."), len(x)))
['e.x.a', 'ex.am.ple', 'm.p.l.e']
>>> sorted(given_list, key=lambda x: (x.count("."), len(x)), reverse=True)
['m.p.l.e', 'ex.am.ple', 'e.x.a']
由于您使用的是
.sort
,因此也可以在此处执行相同的操作,以便对列表进行适当排序:

>>> given_list = ["e.x.a", "m.p.l.e", "ex.am.ple"]
>>> given_list.sort(key=lambda x: (x.count("."), len(x)), reverse=True)
>>> given_list
['m.p.l.e', 'ex.am.ple', 'e.x.a']

啊,是的,我记得我试过这个,但我一定把它弄糟了。哦,天哪,我觉得很尴尬。谢谢你的帮助help@solinvictus乐意帮忙,别忘了接受答案:)