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

如何对比字典当前键与前一个键的值并移除重复元素?

字典元素跨键去重实现方案

问题背景

给定初始字典:

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]]

代码说明

  1. 键排序:通过sorted并指定key=int,确保按键的数字顺序处理(即使后续新增更多数字键也能兼容)。
  2. 元素收集:将前一个键下的所有元素存入集合,利用集合的O(1)查找特性提升去重效率。
  3. 列表推导式过滤:遍历当前键的每个子列表,仅保留不在前一个键元素集合中的数字,生成新的子列表替换原内容。

运行上述代码后,z_n['2']将变为[[5],[10],[3]],完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:01:22