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

如何合并字典列表中相同键对应的值?

合并列表中字典的相同键对应值

问题描述

给定一个包含多个单键字典的列表,需要将相同键对应的值收集为列表,合并成一个目标字典。

原始数据

data = [
 {'Supplement': {'label': 'Protein - 25.0', 'value': 1}}, 
 {'Fruit and vegetable': {'label': 'Test - 100.0', 'value': 2}},
 {'Fruit and vegetable': {'label': 'Peach - 10.0', 'value': 3}}, 
 {'Protein': {'label': 'Yakiniku - 100.0', 'value': 4}}
]

期望结果

data_merged = {
    'Supplement': [ {'label': 'Protein - 25.0', 'value': 1}],
    'Fruit and vegetable': [{'label': 'Test - 100.0', 'value': 2}, {'label': 'Peach - 10.0', 'value': 3}],
    'Protein': [{'label': 'Yakiniku - 100.0', 'value': 4}]
}

解决方案

方法一:基础循环实现

无需导入额外模块,通过简单遍历和判断完成合并:

data_merged = {}
for item in data:
    # 获取当前字典的唯一键值对
    key, value = next(iter(item.items()))
    # 键不存在则初始化空列表,再添加对应值
    if key not in data_merged:
        data_merged[key] = []
    data_merged[key].append(value)

方法二:使用collections.defaultdict简化代码

借助defaultdict自动为不存在的键初始化空列表,代码更简洁:

from collections import defaultdict

data_merged = defaultdict(list)
for item in data:
    key, value = next(iter(item.items()))
    data_merged[key].append(value)

# 可选:转换为普通字典类型
data_merged = dict(data_merged)

说明

两种方法核心逻辑一致:遍历列表中的每个字典,提取键和对应值,将相同键的值收集到列表中。next(iter(item.items()))用于快速获取单键字典的键值对,因为每个元素字典仅有一个键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:55:15