如何按项目总数对列表列表进行排序?

问题描述 投票:0回答:1

我有一个清单:

[
  [['4', '10'], ['2', '6'], ['1', '3']],
  [['1', '4', '10'], ['5', '2', '6'], ['11', '1', '3']]
]

我想按项目总数排序。第一组有第4、10、2、6、1和3项,总共6项。第二个有 1、4、10、5、2、6、11、1 和 3,总共 9 个元素。所以我希望第二组在第一组之前出现:

[
  [['1', '4', '10'], ['5', '2', '6'], ['11', '1', '3']],
  [['4', '10'], ['2', '6'], ['1', '3']]
]

(列表中有更多组,这只是问题的射击版本)

我尝试做一个

sort(key=len)
,但它按每个组拥有的列表数量排序(例如,第一组有 3 个列表,第二组也有 3 个)。

python list sorting
1个回答
0
投票

据我了解,您想要的是根据每个列表中包含的所有列表的长度总和进行排序。您可以做的是同时使用

sum
len
(以及将它们组合起来的
map
)来实现您的目标:

ls = [[['4', '10'], ['2', '6'], ['1', '3']], [['1', '4', '10'], ['5', '2', '6'], ['11', '1', '3']]]

sorted_ls = sorted(ls, key=lambda l: sum(map(len, l)), reverse=True)

请注意,

sorted
将返回按升序排序的列表,因此我们通过
reverse=True
对其进行降序排序。

© www.soinside.com 2019 - 2024. All rights reserved.