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

Python字典列表更新异常:部分ID未添加、空ID列表缺失求排查

问题分析与代码修复

原始数据

list1= [{"id": "1e","name": "cup"},{"id": "4d","name": "cup"},{"id": "4c","name": "table"}]
list2= [{"name": "cup"},{"name": "furniture"}]  

需求

  • 检查list2中每个字典的name键是否与list1中各字典的name键匹配;
  • 匹配时将list1中对应的ID收集为列表,更新到list2的对应字典中;无匹配时,对应字典需添加空ID列表。

错误代码

for i in range(len(list2)):
  for j in range(len(list1)):
    list3 = []
    if list2[i]['name'] == list1[j]['name']:
      list3.append(list1[j]['id'])
      list2[i].update(id= list3)
print(list2)

当前输出

[{'name': 'cup', 'id': ['4d']}, {'name': 'furniture'}]

期望输出

[{'name': 'cup', 'id': ['4d','1e']}, {'name': 'furniture', 'id': []}]

错误原因

  1. 列表初始化位置错误:list3 = []放在list1的循环内部,每次遍历list1的元素都会重置空列表,导致之前匹配到的1e被清空,最终只保留最后一次匹配的4d。
  2. 未处理无匹配场景:对于furniture这类在list1中没有对应项的字典,没有主动添加id: []键值对,导致输出中缺少该字段。

修复后的代码

基础循环版本

for item2 in list2:
    # 先初始化空ID列表,确保每个字典都有id字段
    id_list = []
    for item1 in list1:
        if item2['name'] == item1['name']:
            id_list.append(item1['id'])
    item2['id'] = id_list
print(list2)

列表推导式简化版本

for item2 in list2:
    item2['id'] = [item1['id'] for item1 in list1 if item1['name'] == item2['name']]
print(list2)

运行上述修复代码后,就能得到符合预期的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:19:03