Python groupby函数图文详解
groupby()
函数是 Python 内置的用于分组操作的函数,该函数可以将列表、元组、字典等可迭代对象中的数据按照指定规则进行分组,然后返回一个按照分组规则分组后的集合(通常是一个字典、迭代器或列表)。本篇文章将对 groupby()
函数进行详细讲解,并且提供两条示例说明,帮助读者更好地理解本函数。
1. 基本用法
groupby()
函数的基本语法如下:
itertools.groupby(iterable, key=None)
其中,iterable
指的是可迭代对象(例如列表、元组、字典等),key
是一个用于分组的函数,用于指定对可迭代对象中的数据进行分组的规则。
以下是一个简单的示例:将一个列表中的数据按照奇偶性分成两组,并将结果输出到控制台:
import itertools
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 定义分组函数
def group_func(x):
if x % 2 == 0:
return "even"
else:
return "odd"
# 使用 groupby() 函数进行分组
groups = itertools.groupby(nums, group_func)
# 遍历分组后的结果
for group_key, group_data in groups:
print(f"{group_key}: {list(group_data)}")
在上述代码中,我们首先定义了一个 group_func()
函数,该函数用于判断当前元素的奇偶性,返回字符串 "even" 或 "odd"。接着,我们使用 groupby()
函数将列表 nums
中的元素按照 group_func()
函数的返回值进行分组。最后,我们遍历分组后的结果,并将每个组的 key
值(即 "even" 或 "odd")以及组中的元素列表输出到控制台。
运行上述代码可以得到以下输出结果:
odd: [1, 3, 5, 7, 9]
even: [2, 4, 6, 8]
上述输出结果表明,函数成功地将 nums
列表中的数据按照奇偶性分成了两组。
2. 示范示例
在本节中,我们将为大家提供两个示例,以更好地说明 groupby()
函数的用法。
示例1:将学生成绩按照班级分组并计算平均值
在这个示例中,我们将使用 groupby()
函数将一批学生成绩按照班级进行分组,并计算每个班级的平均值。
import itertools
students = [
{"name": "John", "class": "A", "score": 85},
{"name": "Mike", "class": "B", "score": 90},
{"name": "Sarah", "class": "A", "score": 92},
{"name": "Kevin", "class": "A", "score": 87},
{"name": "Tom", "class": "B", "score": 91},
{"name": "Lucy", "class": "B", "score": 89}
]
# 定义分组函数
def group_func(data):
return data["class"]
# 使用 groupby() 函数进行分组
groups = itertools.groupby(students, group_func)
# 遍历分组后的结果,计算每个班级的平均值
for group_key, group_data in groups:
scores = [item["score"] for item in group_data]
avg_score = sum(scores) / len(scores)
print(f"{group_key}: {avg_score}")
在上述代码中,我们首先构造了一个由学生成绩信息组成的列表 students
,每个学生信息包括姓名、班级和成绩。接着,我们使用 groupby()
函数将 students
列表中的学生成绩信息按照班级进行分组。最后,我们遍历分组后的结果,计算每个班级的平均值,并将结果输出到控制台。
运行上述代码可以得到以下输出结果:
A: 88.0
B: 90.0
这个输出结果表明,函数成功地将学生成绩按照班级进行分组,然后计算了每个班级的平均值。
示例2:将字符串列表按照首字母分组
在这个示例中,我们将使用 groupby()
函数将一个字符串列表按照首字母进行分组。
import itertools
words = ["apple", "banana", "orange", "ant", "almond", "blueberry"]
# 定义分组函数
def group_func(word):
return word[0]
# 使用 groupby() 函数进行分组
groups = itertools.groupby(words, group_func)
# 遍历分组后的结果
for group_key, group_data in groups:
print(f"{group_key}: {list(group_data)}")
在上述代码中,我们构造了一个字符串列表 words
,并定义了一个 group_func()
函数,该函数返回字符串的首字母。接着,我们使用 groupby()
函数将 words
列表中的字符串按照首字母进行分组,并输出分组后的结果。
运行上述代码可以得到以下输出结果:
a: ['apple', 'ant', 'almond']
b: ['banana', 'blueberry']
o: ['orange']
这个输出结果表明,函数成功地将字符串列表 words
中的元素按照首字母进行了分组。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python groupby函数图文详解 - Python技术站