使用 Python 将键分组到值列表中
将键分组到值的过程是根据特定属性或标准对数据进行分类的过程。例如,假设您有一个学生数据集,并且您希望按其成绩对他们进行分组。这种分组使我们能够轻松地分别分析和对每个类别执行计算。在 Python 中,我们可以通过多种方式将键分组到值列表中,例如使用字典、defaultdict 和itertools.groupby。在本文中,我们将了解如何使用这些方法将键分组到值列表中。
方法 1:使用字典
我们可以使用 Python 中的字典轻松地将键分组到值。让我们考虑一个示例,其中我们有一个水果列表,并且我们希望根据其颜色对它们进行分组。
语法
list_name.append(element)
这里,append() 函数是用于将元素添加到 list_name 末尾的列表方法。它通过将指定的元素作为新项目添加到列表中来修改原始列表。
示例
在下面的示例中,我们遍历水果列表并提取每个水果的颜色。然后,我们检查颜色是否已存在于 grouped_fruits 字典中。如果存在,我们将水果附加到该颜色的现有水果列表中。否则,我们将使用当前水果创建一个新列表,并将其分配给相应的颜色。
fruits = [
{"name": "Apple", "color": "Red"},
{"name": "Banana", "color": "Yellow"},
{"name": "Grapes", "color": "Green"},
{"name": "Orange", "color": "Orange"},
{"name": "Blueberry", "color": "Blue"},
{"name": "Strawberry", "color": "Red"},
]
grouped_fruits = {}
for fruit in fruits:
color = fruit["color"]
if color in grouped_fruits:
grouped_fruits[color].append(fruit)
else:
grouped_fruits[color] = [fruit]
print(grouped_fruits)
输出
{
'Red': [{'name': 'Apple', 'color': 'Red'}, {'name': 'Strawberry', 'color': 'Red'}],
'Yellow': [{'name': 'Banana', 'color': 'Yellow'}],
'Green': [{'name': 'Grapes', 'color': 'Green'}],
'Orange': [{'name': 'Orange', 'color': 'Orange'}],
'Blue': [{'name': 'Blueberry', 'color': 'Blue'}]
}
方法 2:使用 defaultdict 进行分组
我们可以使用 Python collections 模块中的 defaultdict 实现更有效的解决方案。defaultdict 会自动为不存在的键初始化一个值,从而使我们无需显式检查和创建列表。
语法
groups = defaultdict(list) groups[item].append(item)
这里,defaultdict(list) 使用 collections 模块中的 defaultdict 类创建了一个名为 groups 的类似字典的对象。groups[item].append(item) 将一个项目附加到与 groups 字典中键 item 关联的列表中。通过使用方括号 [] 使用 groups[item] 访问字典,它会在键 item 已存在的情况下检索现有列表,或者在第一次遇到 item 时创建一个新的空列表作为值。
示例
在下面的示例中,我们创建了一个名为grouped_fruits 的defaultdict,其默认值使用defaultdict(list) 设置为空列表。现在,无论何时我们访问不存在的键,它都会自动将空列表初始化为值。这简化了分组过程,因为我们不需要单独处理键的存在。
from collections import defaultdict
fruits = [
{"name": "Apple", "color": "Red"},
{"name": "Banana", "color": "Yellow"},
{"name": "Grapes", "color": "Green"},
{"name": "Orange", "color": "Orange"},
{"name": "Blueberry", "color": "Blue"},
{"name": "Strawberry", "color": "Red"},
]
grouped_fruits = defaultdict(list)
for fruit in fruits:
grouped_fruits[fruit["color"]].append(fruit)
print(dict(grouped_fruits))
输出
{
'Red': [{'name': 'Apple', 'color': 'Red'}, {'name': 'Strawberry', 'color': 'Red'}],
'Yellow': [{'name': 'Banana', 'color': 'Yellow'}],
'Green': [{'name': 'Grapes', 'color': 'Green'}],
'Orange': [{'name': 'Orange', 'color': 'Orange'}],
'Blue': [{'name': 'Blueberry', 'color': 'Blue'}]
}
方法 3:使用 itertools.groupby 进行分组
我们可以使用 Python itertools 模块中的 groupby 函数轻松地将键分组到值。此函数允许我们根据键函数对可迭代对象中的元素进行分组。
语法
list_name.append(element)
这里,append() 函数是用于将元素添加到 list_name 末尾的列表方法。它通过将指定的元素作为新项目添加到列表中来修改原始列表。
itertools.groupby(iterable, key=None)
这里,groupby() 方法将可迭代对象作为输入,并带有一个可选的键函数。它返回一个迭代器,该迭代器生成包含可迭代对象中连续键和组的元组。键函数用于确定分组标准。
示例
在下面的示例中,我们定义了一个名为key_function 的键函数,该函数根据数字的奇偶性将其分类为“偶数”或“奇数”。然后,我们使用groupby 根据此键函数对数字进行分组。groupby 函数返回一个迭代器,该迭代器提供键和分组元素的迭代器。我们将迭代器转换为列表,并将其作为grouped_numbers 字典中的值。
from itertools import groupby
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
grouped_numbers = {}
key_function = lambda x: "Even" if x % 2 == 0 else "Odd"
for key, group in groupby(numbers, key_function):
grouped_numbers[key] = list(group)
print(grouped_numbers)
输出
{'Odd': [9], 'Even': [10]}
结论
在本文中,我们讨论了如何在 Python 中使用不同的方法将键分组到值列表中。我们首先使用字典,其中我们手动检查键是否存在并创建列表作为值。然后,我们使用了 defaultdict,它通过自动为不存在的键初始化值来简化分组过程。此外,我们探讨了 itertools.groupby,这是一个强大的函数,允许根据键函数进行分组。
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP