Python中如何基于公共键合并嵌套字典列表?
按指定键合并字典列表的Python简便实现
当然有啦!在Python里处理这种按指定键合并字典列表的需求,有好几种直观又简便的方法,我结合常见的场景给你演示下~
先明确下典型的输入和预期输出(你可以根据自己的实际结构调整):
样例输入
input_list = [ {"id": 1, "name": "Alice", "score": 85}, {"id": 2, "name": "Bob", "score": 90}, {"id": 1, "age": 25}, {"id": 2, "age": 23} ]
预期输出(按id键合并)
output_list = [ {"id": 1, "name": "Alice", "score": 85, "age": 25}, {"id": 2, "name": "Bob", "score": 90, "age": 23} ]
方法1:手动循环+字典映射(最直观)
这种方法逻辑清晰,不需要额外依赖,适合小体量数据:
def merge_dicts_by_key(input_list, key): merged = {} for d in input_list: current_key = d[key] # 如果键不存在,先初始化一个空字典 if current_key not in merged: merged[current_key] = {} # 合并字典,后面的字典会覆盖前面相同键的值(如果有重复键的话) merged[current_key].update(d) # 把字典的值转成列表返回 return list(merged.values()) # 调用示例 result = merge_dicts_by_key(input_list, "id") print(result)
方法2:用collections.defaultdict简化代码
借助defaultdict可以省去判断键是否存在的步骤,代码更简洁:
from collections import defaultdict def merge_dicts_by_key(input_list, key): merged = defaultdict(dict) for d in input_list: merged[d[key]].update(d) return list(merged.values()) # 调用方式和上面一致,结果完全相同
方法3:用Pandas处理大规模数据
如果你的数据量很大,或者需要后续做更多数据处理,Pandas会是更高效的选择:
import pandas as pd # 把列表转成DataFrame df = pd.DataFrame(input_list) # 按指定键分组,取每组的最后一条数据(也可以用`first()`取第一条,根据需求调整) merged_df = df.groupby("id").last().reset_index() # 转回字典列表 result = merged_df.to_dict("records") print(result)
额外说明:处理重复键的特殊情况
如果同一个键对应多个相同的字段(比如同一个id有多个score),上面的方法会直接覆盖。要是想把所有值保留成列表,可以修改逻辑:
from collections import defaultdict def merge_dicts_with_list(input_list, key): merged = defaultdict(dict) for d in input_list: current_key = d[key] for k, v in d.items(): if k not in merged[current_key]: merged[current_key][k] = [] merged[current_key][k].append(v) # 确保主键本身是唯一值(比如id不需要列表) merged[current_key][key] = merged[current_key][key][0] return list(merged.values()) # 测试重复键场景 test_input = [ {"id": 1, "score": 85}, {"id": 1, "score": 90}, {"id": 2, "score": 75} ] result = merge_dicts_with_list(test_input, "id") # 输出:[{"id": 1, "score": [85, 90]}, {"id": 2, "score": [75]}]
内容的提问来源于stack exchange,提问作者maya babuji
相关产品推荐
相关产品推荐

