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
相关产品推荐
相关产品推荐

