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

Python如何删除值为列表的字典中的跨键重复元素

实现方法

核心逻辑是按字典键的顺序逐组处理列表,用集合记录已经出现过的元素,避免重复判断的性能损耗,具体步骤:

  • 初始化一个空集合,用于全局存储已经在靠前键的列表中出现过的元素
  • 按键的顺序遍历字典,每一轮处理当前键对应的列表时,仅保留不在已出现集合中的元素
  • 将当前处理完的列表内的所有元素加入已出现集合,供后续键的列表做去重过滤
  • 所有键遍历完成后得到的新字典就是目标结果
完整代码
# 原始待处理字典
raw_dict = {
    1: ['1', '2', '3'],
    2: ['4', '3', '6', '7'],
    3: ['8', '1', '9']
}

seen_elements = set()
processed_dict = {}

# Python3.7+ 字典默认保留插入顺序,可直接遍历items()
# 低版本Python请替换为 for key in sorted(raw_dict.keys()): 后取对应value
for key, lst in raw_dict.items():
    # 过滤已出现过的重复元素,保留原列表内部顺序
    new_lst = [item for item in lst if item not in seen_elements]
    processed_dict[key] = new_lst
    # 更新已出现元素集合
    seen_elements.update(new_lst)
运行验证

执行上述代码后,processed_dict的输出和预期结果完全一致:

{
    1: ['1', '2', '3'],
    2: ['4', '6', '7'],
    3: ['8', '9']
}
补充说明
  • 该实现的时间复杂度为O(n),n为所有列表的元素总个数,用集合做存在性判断比用列表判断效率高很多
  • 处理过程会保留每个列表内部的原始元素顺序,不会做额外排序
  • 如果你的字典键本身不是按期望的处理顺序排列的,只需要在遍历前手动指定键的遍历顺序即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:27:20