首页 > 解决方案 > 如何按第一个元素对列表中的列表进行分组?

问题描述

我有一个看起来像这样的列表:

big_list = [[0,5,70],[0,3,20],[0,4,60],[0,6,30],    
            [1,6,50],[1,4,30],[1,3,70],        
            [2,4,20],[2,5,40],
            [69,420,20]]

如何将其变成此列表,其中所有列表按每个列表中的第一个数字组合成列表:

big_list_sorted = [[[0,5,70],[0,3,20],[0,4,60],[0,6,30]],
                   [[1,6,50],[1,4,30],[1,3,70]],
                   [[2,4,20],[2,5,40]],
                   [[69,420,20]]]

此外,为了便于阅读,我将列表放入原始 big_list 中,但它们不会按顺序排列。

标签: python

解决方案


您可以按字典中的第一个元素对列表进行分组,并使用以下方法获取结果.values()

groups = {}
for l in big_list:
    groups.setdefault(l[0], []).append(l)

big_list_sorted = list(groups.values())
print(big_list_sorted)
# [[[0, 5, 70], [0, 3, 50], [0, 4, 60], [0, 6, 30]], [[1, 6, 50], [1, 4, 30], [1, 3, 70]], [[2, 4, 20], [2, 5, 40]], [[69, 420, 20]]]

推荐阅读