Python - 将元组列表分组到字典中

pythonserver side programmingprogramming更新于 2024/1/20 1:30:00

在 Python 中,我们可以使用不同的方法将元组列表分组到字典中,例如使用 for 循环和条件语句、使用 collections 模块中的 defaultdict 类以及使用 itertools 模块中的 groupby() 函数。在本文中,我们将探索所有这些方法并实现它们以将元组列表分组到字典中。

方法 1:使用 for 循环和条件语句

此方法涉及使用 for 循环迭代元组列表。我们将检查字典中是否存在键,并将相应的元组作为值添加到该键。如果键不存在,我们将在字典中创建一个新的键值对。

语法

list_name.append(element)

此处,append() 函数是一种列表方法,用于将元素添加到 list_name 的末尾。它通过将指定元素添加为新项目来修改原始列表。

示例

在下面的示例中,我们有一个名为 data 的元组列表。我们初始化一个名为 result 的空字典。我们使用 for 循环遍历数据列表中的每个元组。对于每个元组,我们使用索引提取键和值。如果结果字典中已经存在键,我们将值附加到与该键关联的现有列表中。否则,我们在结果字典中创建一个新的键值对,其中键作为提取的键,值作为包含提取值的列表。最后,我们打印结果字典。

data = [('apple', 5), ('banana', 3), ('apple', 2), ('cherry', 7), ('banana', 1)]
result = {}

for item in data:
    key = item[0]
    value = item[1]
    if key in result:
        result[key].append(value)
    else:
        result[key] = [value]

print(result)

输出

{'apple': [5, 2], 'banana': [3, 1], 'cherry': [7]}

方法 2:使用 collections 模块中的 defaultdict 类

此方法使用 collections 模块中的 defaultdict 类。defaultdict 为不存在的键提供默认值,方便对数据进行分组。

语法

groups = defaultdict(list)

此处,语法使用 collections 模块中的 defaultdict() 函数初始化一个名为 groups 的 defaultdict 对象,默认值为空列表。第二行代码使用键 (item) 访问 groups 字典中与该键关联的列表,并将该项附加到列表中。

示例

在下面的示例中,我们从 collections 模块导入 defaultdict 类。我们将结果变量初始化为 defaultdict,默认值设置为空列表。其余代码与第一种方法类似,我们迭代数据列表中的每个元组,提取键和值,并将值附加到结果字典中的相应键。最后,我们在打印之前使用 dict() 函数将结果 defaultdict 转换为常规字典。

from collections import defaultdict

data = [('apple', 5), ('banana', 3), ('apple', 2), ('cherry', 7), ('banana', 1)]
result = defaultdict(list)

for item in data:
    key = item[0]
    value = item[1]
    result[key].append(value)

print(dict(result))

输出

{'apple': [5, 2], 'banana': [3, 1], 'cherry': [7]}

方法 3:使用 itertools 模块中的 groupby() 函数

此方法涉及使用 itertools 模块中的 groupby() 函数。groupby() 函数根据键函数对可迭代对象的元素进行分组。

语法

groups[key] = list(group)

此处,itertools 模块中的 groupby() 函数对 groupby 对象进行迭代。该函数返回键和具有相同值的一组连续项。然后使用键和组在组字典中创建键值对,其中键是唯一值,值是分组项列表。

示例

在下面的示例中,我们从 itertools 模块导入 groupby() 函数。在使用 groupby() 之前,我们使用 lambda 函数根据键对数据列表进行排序。此步骤至关重要,因为 groupby() 要求具有相同键的连续元素在可迭代对象中相邻。然后,我们迭代 groupby() 生成的组。对于每个组,我们提取键并创建与该键关联的值列表。最后,我们将键值对存储在结果字典中并打印它。

from itertools import groupby

data = [('apple', 5), ('banana', 3), ('apple', 2), ('cherry', 7), ('banana', 1)]
result = {}

data.sort(key=lambda x: x[0])  # Sort the data based on the key

for key, group in groupby(data, key=lambda x: x[0]):
    result[key] = [item[1] for item in group]

print(result)

输出

{'apple': [5, 2], 'banana': [3, 1], 'cherry': [7]}

结论

在本文中,我们讨论了如何使用 Python 中的各种方法将元组列表分组到字典中。我们探索了三种方法:使用 for 循环和条件语句、使用 collections 模块中的 defaultdict 类以及利用 itertools 模块中的 groupby() 函数。每种方法都为任务提供了一种解决方案,选择取决于个人偏好和具体要求。


相关文章