首页 > 解决方案 > Python:按两个标准而不是一个标准对列表列表进行排序

问题描述

我有一个 Python 排序问题,类似于我在 stackoverflow 上发现的其他问题,但不完全相同。让我告诉你,也许有人可以帮助:

假设我们有一个可能如下所示的列表列表:

p = [[6, 'k'], [5, 'l'], [2, 'p'], [2, 'd'], [5, 'k']]

我想按两个(!)标准对此进行排序。按一个标准对其进行排序是相当容易和直接的。假设我想首先按每个列表的第一项对其进行排序。我可以这样实现:

sorted_p = sorted(p, key=lambda x:int(x[0]))

到目前为止,一切都很好。我会得到以下 sorted_p:

[[2,'p'], [2, 'd'], [5, 'l'], [5, 'k'], [6, 'k']]

现在真正的麻烦开始了:我希望在第一项多次出现的每种情况下(例如,我们有两个以 2 开头的元组和两个以 5 开头的元组),然后这些元组按元组的第二项排序. 所以我想得到的结果是

[[2,'d'], [2, 'p'], [5, 'k'], [5, 'l'], [6, 'k']]

有谁知道我该怎么做?

感谢您的每一个提示!

标签: pythonarrayslistsorting

解决方案


如果你传递一个元组,Python 会自动按超过 1 个条件排序。在您的情况下,它将是:

p = [[6, 'k'], [5, 'l'], [2, 'p'], [2, 'd'], [5, 'k']]
sorted_p = sorted(p, key=lambda x:(int(x[0]),x[1]))

推荐阅读