gpt4 book ai didi

python - 如何使用 itertools.groupby()?

转载 作者:IT老高 更新时间:2023-10-28 12:03:08 24 4
gpt4 key购买 nike

对于如何实际使用 Python 的 itertools.groupby() 函数,我无法找到可以理解的解释。我想要做的是:

  • 获取一个列表 - 在这种情况下,对象化 lxml 元素的子元素
  • 根据一些标准将其分组
  • 然后分别迭代这些组中的每一个。

我已查看 the documentation ,但我在尝试将它们应用到简单的数字列表之外时遇到了麻烦。

那么,我该如何使用 itertools.groupby()?我应该使用另一种技术吗?指向良好的“先决条件”阅读的指针也将不胜感激。

最佳答案

重要提示:您必须先对数据进行排序


我没有得到的部分是在示例构造中

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("")

这将为您提供输出:

A bear is a animal.
A duck is a animal.

A cactus is a plant.

A speed boat is a vehicle.
A school bus is a vehicle.

在本例中,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 + ".")

这将为您提供输出:

animals: bear and duck.
plants: cactus.
vehicles: speed boat and school bus.

关于python - 如何使用 itertools.groupby()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com