You need to enable JavaScript to run this app. Python 字典过滤:移除字典A中所有在B的键值集合内出现过的数值
优惠活动
大模型
产品
解决方案
定价
更多

Python 字典过滤:移除字典A中所有在B的键值集合内出现过的数值

字典数字过滤实现方案

现有写法问题分析

  • 第一种推导式 C = {k: v for k, v in A.items() if k not in B}:in 操作符作用于字典时仅检索键,既没有覆盖B的值,也没有处理A的值的过滤逻辑,结果不符合预期。
  • 第二种 C = dict(A.items() - B.items()):该操作是求两个字典键值对的差集,和全局数字过滤的需求完全不匹配。

正确实现逻辑

  1. 提取B中所有出现过的数字(包含所有键、所有值,去重形成集合)
  2. 提取A中所有出现过的数字(包含所有键、所有值,去重形成集合)
  3. 用A的数字集合减去B的数字集合,剩余元素即为符合要求的结果

完整可运行代码

# 原始字典定义
A = {1: 27, 3: 41, 7: 26, 11: 32, 12: 23, 14: 23, 15: 37, 18: 27, 21: 35, 23: 12, 25: 33, 26: 7, 27: 1, 29: 14, 32: 11, 33: 25, 35: 21, 36: 27, 37: 15, 38: 25, 39: 23, 41: 3, 44: 27}
B = {1: 27, 3: 41, 7: 26, 11: 32, 12: 23, 15: 37, 18: 27, 21: 35, 26: 7, 29: 14, 32: 11, 33: 25, 35: 21, 36: 27, 39: 23, 41: 3, 44: 27}

# 合并B的所有键、值,去重得到待过滤的数字集合
b_occurred = set(B) | set(B.values())
# 合并A的所有键、值,剔除B中已存在的数字
result = (set(A) | set(A.values())) - b_occurred

# 输出集合形式结果:{38}
print(result)
# 若需直接取出单个值(本例仅1个元素),输出:38
print(next(iter(result)))

若需求为过滤字典A本身,仅保留键和值都不在B的出现集合内的条目,可使用如下写法:

filtered_A = {k: v for k, v in A.items() if k not in b_occurred and v not in b_occurred}
# 本例中所有A的键、值都属于b_occurred,最终得到空字典

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 06:45:04