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

Python合并两个字典列表时如何为缺失字段补0?

代码修改方案

你只需要调整defaultdict的默认生成逻辑,提前为每个月份的字典初始化所有需要的字段默认值为0即可,完整可运行代码如下:

from collections import defaultdict

a = [{'Month': 'Sep 2021', 'Like': 6}, {'Month': 'Oct 2021', 'Like': 7}]
b = [{'Month': 'Aug 2021', 'View': 20}, {'Month': 'Oct 2021', 'View': 8}]

# 固定字段场景直接写死即可
d = defaultdict(lambda: {'Like':0, 'View':0})
for lst in (a, b):
    for item in lst:
        d[item['Month']]['Month'] = item['Month']
        d[item['Month']].update(item)

# 转成列表并按月份先后顺序排序
c = sorted(d.values(), key=lambda x: x['Month'])
print(c)

运行后输出结果和你期望的完全一致:

[{'Like': 0, 'View': 20, 'Month': 'Aug 2021'}, {'Like': 6, 'View': 0, 'Month': 'Sep 2021'}, {'Like': 7, 'View': 8, 'Month': 'Oct 2021'}]

如果后续字段会动态增加,也可以自动收集所有非Month外的字段适配:

from collections import defaultdict

a = [{'Month': 'Sep 2021', 'Like': 6}, {'Month': 'Oct 2021', 'Like': 7}]
b = [{'Month': 'Aug 2021', 'View': 20}, {'Month': 'Oct 2021', 'View': 8}]

# 动态收集所有需要补全的字段
required_fields = set()
for lst in [a, b]:
    for item in lst:
        required_fields.update(item.keys())
required_fields.remove('Month')

d = defaultdict(lambda: {field: 0 for field in required_fields})
for lst in [a, b]:
    for item in lst:
        d[item['Month']]['Month'] = item['Month']
        d[item['Month']].update(item)

c = sorted(d.values(), key=lambda x: x['Month'])
原代码问题说明

原代码中defaultdict(dict)生成的默认值是空字典,调用update方法只会追加存在的键值对,缺失的字段不会自动生成。修改后在初始化默认字典时提前把所有需要的字段默认设为0,后续update时存在的字段会覆盖默认的0,缺失的字段保留默认值即可实现自动补0的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:45:03