暮色呼如
重要说明:您必须先对数据进行排序。我没有得到的部分是在示例构造中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 groupbythings = [("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 + ".")这将为您提供输出:动物:熊和鸭。植物:仙人掌。车辆:快艇和校车。
UYOU
itertools.groupby 是用于分组项目的工具。从文档中,我们进一步了解了它可能会做什么:# [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B# [list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC Dgroupby 对象产生密钥组对,其中组是生成器。特征A.将连续的项目组合在一起B.归因于可迭代项,将所有出现的项归为一组C.指定如何使用按键功能 对项目进行分组*比较表# Define a printer for comparing outputs>>> def print_groupby(iterable, keyfunc=None):... for k, g in it.groupby(iterable, keyfunc):... print("key: '{}'--> group: {}".format(k, list(g)))# Feature A: group consecutive occurrences>>> print_groupby("BCAACACAADBBB")key: 'B'--> group: ['B']key: 'C'--> group: ['C']key: 'A'--> group: ['A', 'A']key: 'C'--> group: ['C']key: 'A'--> group: ['A']key: 'C'--> group: ['C']key: 'A'--> group: ['A', 'A']key: 'D'--> group: ['D']key: 'B'--> group: ['B', 'B', 'B']# Feature B: group all occurrences>>> print_groupby(sorted("BCAACACAADBBB"))key: 'A'--> group: ['A', 'A', 'A', 'A', 'A']key: 'B'--> group: ['B', 'B', 'B', 'B']key: 'C'--> group: ['C', 'C', 'C']key: 'D'--> group: ['D']# Feature C: group by a key function>>> # islower = lambda s: s.islower() # equivalent>>> def islower(s):... """Return True if a string is lowercase, else False.""" ... return s.islower()>>> print_groupby(sorted("bCAaCacAADBbB"), keyfunc=islower)key: 'False'--> group: ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'D']key: 'True'--> group: ['a', 'a', 'b', 'b', 'c']