LEATH
重要说明:你不得不对数据进行排序第一。我没有理解的部分是在示例构造中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 + "."这将给出输出:动物:熊和鸭子。植物:仙人掌。车辆:快艇和校车。