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

Python如何移除字典列表中name和flag字段相同的半重复元素?

问题实现方案

结论

可以通过列表推导式实现需求,仅需额外借助一个可哈希的集合记录已经出现过的name与flag组合即可。

代码实现(Python 3.8+ 支持海象运算符版本,可读性更高)

# 原始数据
raw_data = [
    {'name':'A', 'flag':'2','id':'x1'},
    {'name':'A', 'flag':'2','id':'x2'},
    {'name':'A','flag':'1','id':'x3'},
    {'name':'B', 'flag':'2','id':'x4'}
]

seen_keys = set()
result = [
    item for item in raw_data 
    if (current_key := (item['name'], item['flag'])) not in seen_keys 
    and not seen_keys.add(current_key)
]

代码实现(兼容低版本Python)

如果使用的Python版本低于3.8,不支持海象运算符,可使用以下写法:

seen_keys = set()
result = [
    item for item in raw_data 
    if (item['name'], item['flag']) not in seen_keys 
    and not seen_keys.add((item['name'], item['flag']))
]

实现逻辑说明

  • 我们将每条字典的name和flag字段拼接为元组作为去重判断的键,元组是可哈希类型,可以存入集合
  • 利用and的短路执行特性:只有当前键不在已出现集合中时,才会执行set.add()操作将键存入集合
  • set.add()方法返回值为None,not None的结果为True,因此首次出现的元素会被保留到结果列表中,后续重复出现的同键元素会被直接过滤

输出结果验证

执行后result的内容符合需求:

[{'name':'A', 'flag':'2','id':'x1'},
{'name':'A', 'flag':'1','id':'x3'},
{'name':'B', 'flag':'2','id':'x4'}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:15:03