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

Python中如何对包含相同id值的字典列表进行去重

Python按id字段对字典列表去重实现方案

通用场景(字典为原生Python对象无需转换)

核心逻辑为记录已经出现过的id值,仅保留id第一次出现的对应字典,实现代码如下:

example = [{'term': 'potato', 'id': 10}, {'term': 'potatoes', 'id': 10}, {'term': 'apple', 'id': 7}]
new_list = []
seen_ids = set()
for item in example:
    current_id = item['id']
    if current_id not in seen_ids:
        new_list.append(item)
        seen_ids.add(current_id)

运行后new_list的值即为期望结果:[{'term': 'potato', 'id': 10}, {'term': 'apple', 'id': 7}]

特殊场景(字典为Solr返回的字符串格式)

你原有代码的逻辑本身是正确的,若运行不符合预期可以添加异常兼容避免非法数据影响,代码如下:

import ast 

new_list = []
seen_keys = set()
for term in example:
    # 兼容格式非法的字符串项
    try:
        d = ast.literal_eval(term)
    except (SyntaxError, ValueError):
        continue
    # 兼容无id字段的字典
    current_id = d.get('id')
    if current_id is None:
        continue
    if current_id not in seen_keys:
        new_list.append(d)
        seen_keys.add(current_id)

如果需要保留相同id最后一次出现的字典,可以改用临时字典存储的方式实现:

import ast

id_map = {}
for term in example:
    try:
        d = ast.literal_eval(term)
    except (SyntaxError, ValueError):
        continue
    if d.get('id') is not None:
        id_map[d['id']] = d # 相同id后面的项会覆盖前面的
new_list = list(id_map.values())

两种实现的时间复杂度均为O(n),处理大量数据时效率足够。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:15:03