重要说明:你不得不对数据进行排序第一。
我没有理解的部分是在示例构造中groups = []uniquekeys = []for k, g in groupby(data, keyfunc):
groups.append(list(g)) # Store group iterator as a list
uniquekeys.append(k)
k是当前分组键,并且g是一个迭代器,您可以使用它来迭代由该分组键定义的组。换句话说,groupby迭代器本身返回迭代器。
这里有一个例子,使用更清晰的变量名称:from itertools import groupby
things = [("animal", "bear"), ("animal", "duck"), ("plant", "cactus"), ("vehicle", "speed boat"),
("vehicle", "school bus")]for key, group in groupby(things, lambda x: x[0]):
for thing in group:
print "A %s is a %s." % (thing[1], key)
print " "
这将给出输出:熊是动物。
鸭子是动物。
仙人掌是一种植物。
快艇是一种交通工具。
校车就是一辆车。
在这个例子中,things是元组的列表,每个元组中的第一个项是第二个项所属的组。
这个groupby()函数采用两个参数:(1)数据分组;(2)函数对其进行分组。
这里,lambda x: x[0]诉说groupby()若要将每个元组中的第一个项用作分组键,请执行以下操作。
在上面for声明,groupby返回三个(键,组迭代器)对-每个唯一的键一次。您可以使用返回的迭代器对该组中的每个单独项进行迭代。
下面是一个与相同数据略有不同的示例,使用列表理解:for key, group in groupby(things, lambda x: x[0]):
listOfThings = " and ".join([thing[1] for thing in group])
print key + "s: " + listOfThings + "."
这将给出输出:动物:熊和鸭子。
植物:仙人掌。
车辆:快艇和校车。