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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:01:40