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

Python中合并字典列表:键值不同存列表,相同保留单个值

字典列表合并:相同值保留单个,不同值存列表

需求回顾

给定字典列表:

lst = [{'A':1,'B':2,'C':4},{'A':2,'B':2,'C':4},{'A':3,'B':2,'C':4}]

需要合并为单个字典:键对应的值若全部相同则保留单个值,若存在不同则存入列表,期望输出:

{'A':[1,2,3],'B':2,'C':4}

实现方案

核心思路是先收集所有键对应的全部值,再判断值是否一致,决定最终存储形式:

步骤1:收集所有键对应的值

用临时字典存储每个键的所有值:

lst = [{'A':1,'B':2,'C':4},{'A':2,'B':2,'C':4},{'A':3,'B':2,'C':4}]

# 初始化合并字典,收集所有值
merged = {}
for d in lst:
    for key, val in d.items():
        merged.setdefault(key, []).append(val)

此时merged为:{'A': [1, 2, 3], 'B': [2, 2, 2], 'C': [4, 4, 4]}

步骤2:判断值是否一致并转换格式

遍历临时字典,对每个键的值列表做判断:若所有元素相同则替换为单个值,否则保留列表:

# 处理值格式
for key, values in merged.items():
    if all(v == values[0] for v in values):
        merged[key] = values[0]

print(merged)

运行后即可得到期望输出:{'A': [1, 2, 3], 'B': 2, 'C': 4}

简化写法(字典推导式)

可以将步骤2用字典推导式简化,一行完成格式转换:

merged = {
    k: v[0] if all(x == v[0] for x in v) else v
    for k, v in merged.items()
}

问题原因说明

你之前得到的结果中B和C是单元素列表,是因为只完成了收集值的步骤,没有对值列表做一致性判断和格式转换,所以所有值都被保留为列表形式。

内容的提问来源于stack exchange,提问作者Jennifer Therese

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:45:50