Python。如何减去2本字典

标签 python dictionary subtraction

我有 2 个字典,A 和 B。A 有 700000 个键值对,B 有 560000 个键值对。 B 中的所有键值对都存在于 A 中,但 A 中的一些键是具有不同值的重复项,而一些具有重复值但键是唯一的。我想从A中减去B,这样我就可以得到剩下的140000个键值对。当我根据键标识减去键值对时,由于重复的键,我删除了 150000 个键值对。我想根据每个键值对的键和值的标识来减去键值对,所以我得到 140000。欢迎任何建议。

这是一个例子:

A = {'10':1, '11':1, '12':1, '10':2, '11':2, '11':3}
B = {'11':1, '11':2}

我确实想得到: A-B = {'10':1, '12':1, '10':2, '11':3}

我不想得到:

a) 当基于键时:

{'10':1, '12':1, '10':2}

b) 当基于值时:

{'11':3}

最佳答案

要获取 A 中不在 B 中的项目,仅基于键:

C = {k:v for k,v in A.items() if k not in B}

根据键和值获取 A 中不在 B 中的项目:

C = {k:v for k,v in A.items() if k not in B or v != B[k]}

要就地更新 A(如 A -= B),请执行以下操作:

from collections import deque
consume = deque(maxlen=0).extend
consume(A.pop(key, None) for key in B)

(与将 map() 与 A.pop 一起使用不同,如果 A 中不存在来自 B 的 key ,则使用 None 默认值调用 A.pop 不会中断。此外,与使用 all 不同,此迭代器使用者将迭代所有值,而不管弹出值的真实性。)

关于Python。如何减去2本字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35187165/

相关文章:

python - Pandas 中的命名变换

python - 数据框到列表格式

python - 通过python代码附加JSON文件

swift - 如何改变 Swift Dictionary of Dictionary

c++ - std::map::erase 无限循环

ios - 从 Int 中减去

python - 指定 Automator 中运行哪个版本的 Python?

python - 转换字典对象

python - 带过滤器或减法或类似的计数器

c - 减去循环元素