我有一个清单:
[
[['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 个)。
据我了解,您想要的是根据每个列表中包含的所有列表的长度总和进行排序。您可以做的是同时使用
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
对其进行降序排序。