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

Python:移除字典列表中指定键值重复项,保留首次出现的字典

保留字典列表中每个唯一ID的首个项,移除重复项

问题描述

给定字典列表:

givenValues=[
{'id': '0001', 'name': 'me'},
{'id': '0002', 'name': 'me'},
{'id': '0001', 'name': 'you'},
{'id': '0003', 'name': 'hi'},
{'id': '0001', 'name': 'they'},
{'id': '0002', 'name': 'me'},
{'id': '0002', 'name': 'me'}
]

需要保留每个唯一id对应的首个字典,移除其余重复项,期望结果:

[
{'id': '0001', 'name': 'me'},
{'id': '0002', 'name': 'me'},
{'id': '0003', 'name': 'hi'}
]

现有尝试的问题分析

尝试1的错误

第一种方法中,tempList会重复收集同ID的后续项,而list.remove(item)会删除列表中第一个匹配的项,而非目标的j项。比如删除tempList中的id0002项时,会误删原列表中第一个id0002的条目,导致最终结果丢失该内容。

尝试2的错误

第二种方法在遍历列表时直接修改原列表(删除元素),导致列表长度和索引错位,循环会跳过部分元素,无法彻底删除所有重复项,最终残留未清理的条目。

正确解法

方法1:用集合跟踪已出现的ID(最直观)

遍历原列表,用集合记录已经处理过的ID,只保留首次出现的项:

givenValues = [
    {'id': '0001', 'name': 'me'},
    {'id': '0002', 'name': 'me'},
    {'id': '0001', 'name': 'you'},
    {'id': '0003', 'name': 'hi'},
    {'id': '0001', 'name': 'they'},
    {'id': '0002', 'name': 'me'},
    {'id': '0002', 'name': 'me'}
]

seen_ids = set()
result = []
for item in givenValues:
    item_id = item['id']
    if item_id not in seen_ids:
        seen_ids.add(item_id)
        result.append(item)

print(result)

方法2:利用字典的唯一性(Python 3.7+)

Python 3.7及以上的字典会保留插入顺序,用字典存储首次出现的ID对应的项:

unique_dict = {}
for item in givenValues:
    # 仅当ID未存在时才添加,确保保留首个项
    if item['id'] not in unique_dict:
        unique_dict[item['id']] = item
result = list(unique_dict.values())

print(result)

两种方法都能得到符合预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:15:36