如何合并Python列表中key1值相同的字典内的列表?
用高阶函数合并key值相同的字典并合并对应列表
输入示例
dict1 = {'key1':'x', 'key2':['one', 'two', 'three']} dict2 = {'key1':'x', 'key2':['four', 'five', 'six']} dict3 = {'key1':'y', 'key2':['one', 'two', 'three']} original_list = [dict1, dict2, dict3]
期望输出
result_list = [ {'key1':'x', 'key2':['one', 'two', 'three', 'four', 'five', 'six']}, {'key1':'y', 'key2':['one', 'two', 'three']} ]
高阶函数实现方案
可以利用itertools.groupby进行分组,结合functools.reduce合并列表,全程用高阶函数替代硬编码循环:
from itertools import groupby from functools import reduce # 先按key1排序,保证groupby能正确分组(groupby仅对连续相同元素分组) sorted_list = sorted(original_list, key=lambda d: d['key1']) # 分组并合并每组的key2列表 result_list = [ {'key1': key, 'key2': reduce(lambda acc, d: acc + d['key2'], group, [])} for key, group in groupby(sorted_list, key=lambda d: d['key1']) ] # 验证输出 print(result_list)
代码说明
sorted+ lambda:用匿名函数指定排序依据为字典的key1值,确保同key1的字典连续排列,这是groupby正确分组的前提。groupby+ lambda:以key1为分组键,将列表分成多个字典组。reduce+ lambda:对每个分组内的字典,逐步合并它们的key2列表——初始值为空列表,每次迭代把当前字典的key2列表追加到累积列表中。
这种写法避免了多层嵌套循环和硬编码判断,完全通过高阶函数实现逻辑,代码更简洁、可维护性更强。
内容的提问来源于stack exchange,提问作者Samuel Valdez Bicard
相关产品推荐
相关产品推荐

