以下是一个示例代码,演示如何按照保留所有先前字段进行分组:
from itertools import groupby
def group_by_previous_fields(data):
grouped_data = []
for key, group in groupby(data, key=lambda x: x[:-1]):
grouped_data.append(list(group))
return grouped_data
# 示例数据
data = [
[1, 2, 3, 'A'],
[1, 2, 3, 'B'],
[4, 5, 6, 'C'],
[4, 5, 6, 'D'],
[7, 8, 9, 'E']
]
grouped_data = group_by_previous_fields(data)
print(grouped_data)
输出:
[
[[1, 2, 3, 'A'], [1, 2, 3, 'B']],
[[4, 5, 6, 'C'], [4, 5, 6, 'D']],
[[7, 8, 9, 'E']]
]
在这个示例中,group_by_previous_fields
函数接受一个二维列表作为输入数据。它使用groupby
函数从itertools
模块来对数据进行分组。groupby
函数使用一个key
参数,该参数是一个函数,用于指定按照哪些字段进行分组。在这里,我们使用lambda x: x[:-1]
作为key
,表示按照除最后一个字段外的所有字段进行分组。
groupby
函数返回一个迭代器,每次迭代返回一个分组的键和相应的迭代器。我们使用list(group)
将迭代器转换为列表,并将每个分组添加到grouped_data
列表中。最后,我们返回grouped_data
作为结果。
在示例数据中,我们有5个列表,其中前3个列表的前三个字段是相同的,后两个列表的前三个字段也是相同的。根据我们的分组逻辑,前两个列表被分为一组,后两个列表被分为一组,而第五个列表单独为一组。所以最后的结果中有3个分组。每个分组都是一个包含相应列表的列表。