You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并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)

代码说明

  1. sorted + lambda:用匿名函数指定排序依据为字典的key1值,确保同key1的字典连续排列,这是groupby正确分组的前提。
  2. groupby + lambda:以key1为分组键,将列表分成多个字典组。
  3. reduce + lambda:对每个分组内的字典,逐步合并它们的key2列表——初始值为空列表,每次迭代把当前字典的key2列表追加到累积列表中。

这种写法避免了多层嵌套循环和硬编码判断,完全通过高阶函数实现逻辑,代码更简洁、可维护性更强。

内容的提问来源于stack exchange,提问作者Samuel Valdez Bicard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:55:25