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

如何移除Python字典列表中firstname与tile组合重复的字典元素

按指定字段组合对字典列表去重的正确实现方法

你遇到的问题很典型——要按firstname和tile的组合来去重,而不是匹配整个字典,之前的伪代码有两个关键问题:

  • 遍历列表时直接用pop(i)修改原列表,会导致索引混乱,后续遍历会跳过部分元素;
  • 判断条件i['firstname'] + i['tile'] in l完全不成立,因为列表里的元素是字典,不是字符串,所以永远不会触发删除操作。

下面给你两种实用的实现方法:

方法一:保留首次出现的元素(保持原顺序)

这种方法用一个集合记录已经出现过的字段组合,遍历原列表时只保留未出现过的组合对应的字典,能完美保持原列表的顺序:

l = [ {'firstname': 'joe', 'surname': 'ABCD', 'tile' : 'DE'}, {'firstname': 'john', 'surname': 'DEF', 'tile' : 'BC'}, {'firstname': 'joe', 'surname': 'bloggs', 'tile' : 'DE'}, {'firstname': 'jane', 'surname': 'HH', 'tile' : 'AD'} ]

seen_combinations = set()
unique_list = []

for item in l:
    # 用元组存储字段组合,比字符串拼接更通用(比如字段是数字类型也能处理)
    combo_key = (item['firstname'], item['tile'])
    if combo_key not in seen_combinations:
        seen_combinations.add(combo_key)
        unique_list.append(item)

print(unique_list)

运行后会得到保留第一个joe+DE组合的结果,也就是移除了第三个重复的字典元素。

方法二:保留最后出现的元素(简洁写法)

如果你的需求是保留每个组合最后出现的字典,可以用字典推导式利用字典键的唯一性,Python 3.7+的字典会保留插入顺序:

l = [ {'firstname': 'joe', 'surname': 'ABCD', 'tile' : 'DE'}, {'firstname': 'john', 'surname': 'DEF', 'tile' : 'BC'}, {'firstname': 'joe', 'surname': 'bloggs', 'tile' : 'DE'}, {'firstname': 'jane', 'surname': 'HH', 'tile' : 'AD'} ]

# 用字段组合作为字典键,后面的重复键会覆盖前面的
unique_dict = {(item['firstname'], item['tile']): item for item in l}
unique_list = list(unique_dict.values())

print(unique_list)

这个结果里,joe+DE对应的字典会是第三个元素(surname为bloggs的那个)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:07:48