如何对比字典当前键与前一个键的值并移除重复元素?
字典元素跨键去重实现方案
问题背景
给定初始字典:
z_n = {'1': [[4, 7], [7, 8], [7, 9], [6, 7]], '2': [[4, 5], [8, 10], [3, 4]]}
已完成第一步处理(移除第一个键对应列表中的数字7),得到:
z_n = {'1': [[4], [8], [9], [6]], '2': [[4, 5], [8, 10], [3, 4]]}
需求:从第二个键开始,将当前键对应列表的每个子元素与前一个键的所有元素对比,移除重复值,最终使'2'对应的值变为[[5],[10],[3]]。
实现代码
# 按数字顺序排序字典的键,保证处理顺序正确 sorted_keys = sorted(z_n.keys(), key=int) # 从第二个键开始遍历处理 for idx in range(1, len(sorted_keys)): prev_key = sorted_keys[idx-1] curr_key = sorted_keys[idx] # 提取前一个键下的所有元素,存入集合以提升查找效率 prev_all_elements = set() for sub_list in z_n[prev_key]: prev_all_elements.update(sub_list) # 过滤当前键下每个子列表中的重复元素 z_n[curr_key] = [[num for num in sub if num not in prev_all_elements] for sub in z_n[curr_key]]
代码说明
- 键排序:通过
sorted并指定key=int,确保按键的数字顺序处理(即使后续新增更多数字键也能兼容)。 - 元素收集:将前一个键下的所有元素存入集合,利用集合的O(1)查找特性提升去重效率。
- 列表推导式过滤:遍历当前键的每个子列表,仅保留不在前一个键元素集合中的数字,生成新的子列表替换原内容。
运行上述代码后,z_n['2']将变为[[5],[10],[3]],完全符合需求。
内容的提问来源于stack exchange,提问作者maxwell_742
相关产品推荐
相关产品推荐

