对列表的元素进行分组
我有一个看起来像这样的列表:
old_list = [['A', 1, 2], ['A', 5, 3], ['A', 3, 2], ['B', 1, 1], ['B', 2, 5], ['C', 3 , 1], ['C', 9, 2]]
并且我希望我的函数对其进行迭代,因此输出是一个类似于下面的列表,每个分组项有一个元素(这里是字符串)
new_list = [[1, 2, 5, 3, 3, 2], [1, 1, 2, 5], [3, 1, 9, 2]]
回答
通过itertools groupby:
from itertools import groupby
result = [[j for i in k for j in i[1:]]
for _, k in groupby(old_list, key=lambda x: x[0])]
OUTPUT:
[[1, 2, 5, 3, 3, 2], [1, 1, 2, 5], [3, 1, 9, 2]]
NOTE:如果列表未排序,则您可能需要根据第一个元素对第一个元素进行排序。
old_list = sorted(old_list, key= lambda x: x[0])