如何合并字典列表中相同键对应的值?
合并列表中字典的相同键对应值
问题描述
给定一个包含多个单键字典的列表,需要将相同键对应的值收集为列表,合并成一个目标字典。
原始数据
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
相关产品推荐
相关产品推荐

