You need to enable JavaScript to run this app. Python用for循环合并同键字典,将dict1数据追加到dict2
优惠活动
大模型
产品
解决方案
定价
更多

Python用for循环合并同键字典,将dict1数据追加到dict2

合并字典的简化实现方案

你当前的两个字典本身就以站点ID为顶层唯一键做索引,完全不需要用双层循环逐次匹配、逐字段硬编码赋值,根据你需要的合并范围,有两种非常简洁的实现方式。

1. 仅合并指定字段(完全匹配你的需求)

你只需要把num_bikes_available、num_bikes_available_types、last_reported这类指定字段合并到dict2的对应条目里,不需要把dict1里的is_installed、numDocksAvailable等多余字段带过去的话,可以写:

# 定义需要从dict1提取的目标字段,后续要增减字段直接改这个列表即可
MERGE_FIELDS = [
    "num_bikes_available",
    "num_bikes_available_types",
    "last_reported"
]

# 遍历dict2的站点条目做匹配
for station_id, info in dict2.items():
    # 检查dict1中是否存在同站点ID的数据
    if station_id not in dict1:
        continue
    # 批量把指定字段赋值到dict2的对应条目中
    for field in MERGE_FIELDS:
        info[field] = dict1[station_id][field]

执行完成后,dict2的对应条目就会自动补上需要的字段。如果后续需要生成你之前代码里的列表格式结果,直接一行代码就能转:

donnees = list(dict2.values())

完全不用手动逐个构建字典对象。

2. 全量合并嵌套字典(适合不需要筛选字段的场景)

如果你不介意把dict1对应站点的所有字段都合并到dict2,可以用字典自带的update方法进一步简化:

for station_id, info in dict2.items():
    if station_id in dict1:
        info.update(dict1[station_id])

注意:这种写法会自动用dict1的内容覆盖两个字典里重名的字段,比如示例中两个字典都有stationCode字段,执行后会用dict1里的6003覆盖dict2原本的16107。如果不想让原有字段被覆盖,还是用第一种指定字段提取的方案更稳妥。

之前写法的问题优化点

你之前的双层循环实现,时间复杂度是O(n*m),数据量大的时候匹配效率很低,而且逐字段硬编码赋值的方式维护成本很高——后续要增减合并字段,就得手动修改赋值行。改用顶层键匹配的写法后,时间复杂度降到O(n),不管站点规模多大,一次遍历就能完成匹配,字段调整也只要修改目标字段列表就行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 20:36:05