下面是一个示例代码,演示如何按多个值将对象分组并合并重复项:
from itertools import groupby
from operator import itemgetter
data = [
{'name': 'John', 'age': 30, 'city': 'New York'},
{'name': 'Alice', 'age': 25, 'city': 'San Francisco'},
{'name': 'Bob', 'age': 30, 'city': 'New York'},
{'name': 'Charlie', 'age': 25, 'city': 'San Francisco'},
{'name': 'David', 'age': 35, 'city': 'Chicago'},
{'name': 'Eve', 'age': 30, 'city': 'New York'}
]
# 按照 'age' 和 'city' 字段进行分组
data.sort(key=itemgetter('age', 'city'))
groups = groupby(data, key=itemgetter('age', 'city'))
# 合并重复项
merged_data = []
for key, group in groups:
group_list = list(group) # 将 group 转换为列表方便处理
merged_item = {
'age': key[0],
'city': key[1],
'names': [item['name'] for item in group_list]
}
merged_data.append(merged_item)
# 打印结果
for item in merged_data:
print(item)
输出结果如下:
{'age': 25, 'city': 'San Francisco', 'names': ['Alice', 'Charlie']}
{'age': 30, 'city': 'New York', 'names': ['John', 'Bob', 'Eve']}
{'age': 35, 'city': 'Chicago', 'names': ['David']}
在这个示例中,我们使用groupby()
函数从data
列表中按照'age'
和'city'
字段进行分组。然后,我们遍历每个分组,将分组中的姓名添加到一个新的列表中,并创建一个包含'age'
、'city'
和'names'
字段的合并项。最后,我们将所有合并项添加到merged_data
列表中,并打印结果。
下一篇:按多个值过滤对象数组