📅  最后修改于: 2023-12-03 15:19:23.258000             🧑  作者: Mango
在Python中,我们经常会遇到需要按照特定键对字典中的数据进行分组的情况。本文将介绍几种方法来实现这一功能,并给出相应的代码示例。
data = [
{'name': 'Alice', 'age': 25, 'group': 'A'},
{'name': 'Bob', 'age': 30, 'group': 'B'},
{'name': 'Charlie', 'age': 35, 'group': 'A'},
{'name': 'David', 'age': 40, 'group': 'B'},
{'name': 'Eve', 'age': 45, 'group': 'C'}
]
result = {}
for item in data:
group = item['group']
if group in result:
result[group].append(item)
else:
result[group] = [item]
print(result)
输出结果:
{
'A': [{'name': 'Alice', 'age': 25, 'group': 'A'}, {'name': 'Charlie', 'age': 35, 'group': 'A'}],
'B': [{'name': 'Bob', 'age': 30, 'group': 'B'}, {'name': 'David', 'age': 40, 'group': 'B'}],
'C': [{'name': 'Eve', 'age': 45, 'group': 'C'}]
}
在这个方法中,我们使用一个空字典 result
来保存分组结果。遍历字典中的每个元素,提取出特定键的值 group
,然后检查 group
是否已经在 result
中。如果存在,则将当前元素添加到 result[group]
中;如果不存在,则创建一个新的列表,并将当前元素添加到该列表中。
from collections import defaultdict
data = [
{'name': 'Alice', 'age': 25, 'group': 'A'},
{'name': 'Bob', 'age': 30, 'group': 'B'},
{'name': 'Charlie', 'age': 35, 'group': 'A'},
{'name': 'David', 'age': 40, 'group': 'B'},
{'name': 'Eve', 'age': 45, 'group': 'C'}
]
result = defaultdict(list)
for item in data:
result[item['group']].append(item)
print(result)
输出结果与上述方法一相同。
在这个方法中,我们使用 defaultdict(list)
创建一个默认值为列表的字典 result
。当访问一个不存在的键时,defaultdict
会自动创建一个空列表作为默认值。这样我们就可以直接使用 result[item['group']].append(item)
来添加新的元素。
from itertools import groupby
data = [
{'name': 'Alice', 'age': 25, 'group': 'A'},
{'name': 'Bob', 'age': 30, 'group': 'B'},
{'name': 'Charlie', 'age': 35, 'group': 'A'},
{'name': 'David', 'age': 40, 'group': 'B'},
{'name': 'Eve', 'age': 45, 'group': 'C'}
]
data.sort(key=lambda x: x['group'])
result = {key: list(group) for key, group in groupby(data, key=lambda x: x['group'])}
print(result)
输出结果与上述方法一相同。
在这个方法中,我们首先使用 data.sort(key=lambda x: x['group'])
将数据列表按照特定键的值进行排序。然后使用 groupby
函数按照特定键对排序后的列表进行分组。最后,我们将分组的结果转换为字典,并存储在 result
中。
以上就是按特定键对字典数据进行分组列表的几种常用方法。根据实际需求选择相应的方法,可以更高效地处理数据。