如何高效删除Python字典中同key或跨key的所有重复值
实现方案
场景1:所有出现过≥2次的元素全局完全移除(匹配你给出的示例输出)
这种场景下只要某个元素在整个字典的所有列表中总共出现超过1次,就会从所有位置删除,时间复杂度为O(n)(n为所有列表的元素总个数),实现逻辑如下:
- 第一步遍历所有元素统计全局出现频次
- 第二步按频次过滤每个列表,仅保留出现次数为1的元素
代码实现:
from collections import Counter original_dict = { "A": ["a", "b", "c"], "B": ["a", "d", "f"], "C": ["i", "i", "j"] } # 统计所有值的全局出现次数 count = Counter(val for lst in original_dict.values() for val in lst) # 过滤得到结果 res = {k: [v for v in lst if count[v] == 1] for k, lst in original_dict.items()}
执行后res的值和你给出的目标结构完全一致。
场景2:保留元素第一次出现的实例,仅删除后续重复副本
如果你的需求是重复元素只留第一次出现的位置,后续所有重复出现的都删除(比如示例中A的a会保留,B的a会删除,C的第一个i会保留,第二个i会删除),可以用下面的方案,时间复杂度同样是O(n):
seen = set() res = {} for k, lst in original_dict.items(): filtered = [] for v in lst: if v not in seen: filtered.append(v) seen.add(v) res[k] = filtered
内容的提问来源于stack exchange,提问作者hafiz031
相关产品推荐
相关产品推荐

