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

如何高效实现字典列表按Key分组聚合为字典?

优化字典列表的合并逻辑:更高效的实现方式

你的原代码逻辑是正确的,确实能完成需求,但可以通过Python内置工具让代码更简洁、效率更优,这里提供几种方案:

方案1:使用collections.defaultdict简化键存在性检查

defaultdict可以自动为不存在的键创建指定类型的默认值(这里是列表),省去手动判断的步骤,代码更简洁,执行效率也更优:

from collections import defaultdict

input_dic = {"A":[{"a":11,"b":21,"c":31},{"a":12,"b":22,"d":24},{"a":18,"e":22,"d":24,"z":44}]}
res_pp = {}
for k, v in input_dic.items():
    merged_dict = defaultdict(list)
    for d in v:
        for kk, vv in d.items():
            merged_dict[kk].append(vv)
    res_pp[k] = dict(merged_dict)  # 若需转为普通字典,可执行此步;直接用defaultdict也可满足多数场景

方案2:使用字典的setdefault方法(无需额外导入)

如果不想引入外部模块,setdefault方法可以一行完成“检查键是否存在+创建默认值+追加元素”的操作:

input_dic = {"A":[{"a":11,"b":21,"c":31},{"a":12,"b":22,"d":24},{"a":18,"e":22,"d":24,"z":44}]}
res_pp = {}
for k, v in input_dic.items():
    merged_dict = {}
    for d in v:
        for kk, vv in d.items():
            merged_dict.setdefault(kk, []).append(vv)
    res_pp[k] = merged_dict

对原代码的小优化

如果想保留原代码的结构,也可以把if kk in merged_dict.keys()改为if kk in merged_dict——字典的成员检查直接针对键,不需要调用keys()方法,能小幅提升执行效率。

总结

上述两种方案都比原代码更简洁易读,执行效率也与原代码相当甚至更优,其中defaultdict在处理大量数据时的表现略好,而setdefault则无需额外导入模块,适合轻量场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:45:40