Luc*_*cas 6 python dictionary subtraction
我有2个词典,A和B. A有700000个键值对,B有560000个键值对.来自B的所有键值对都存在于A中,但A中的某些键是具有不同值的重复项,而某些键具有重复值但是唯一键.我想从A中减去B,所以我可以得到剩余的140000个键值对.当我根据键标识减去键值对时,由于重复键,我删除了150000个键值对.我想根据每个键值对的BOTH键和值的标识减去键值对,所以我得到140000.任何建议都是受欢迎的.
这是一个例子:
A = {'10':1, '11':1, '12':1, '10':2, '11':2, '11':3}
B = {'11':1, '11':2}
Run Code Online (Sandbox Code Playgroud)
我想得到:AB = {'10':1,'12':1,'10':2,'11':3}
我不想得到:
a)基于密钥时:
{'10':1, '12':1, '10':2}
Run Code Online (Sandbox Code Playgroud)
要么
b)基于价值观:
{'11':3}
Run Code Online (Sandbox Code Playgroud)
Pau*_*McG 23
要获取A中不在B中的项目,仅基于键:
C = {k:v for k,v in A.items() if k not in B}
Run Code Online (Sandbox Code Playgroud)
要根据键和值获取A中不在B中的项目:
C = {k:v for k,v in A.items() if k not in B or v != B[k]}
Run Code Online (Sandbox Code Playgroud)
Bri*_*ien 11
一种简单,直观的方法是
dict(set(a.items()) - set(b.items()))
Run Code Online (Sandbox Code Playgroud)
A = {'10':1, '11':1, '12':1, '10':2, '11':2, '11':3}
B = {'11':1, '11':2}
Run Code Online (Sandbox Code Playgroud)
您在Python中不能有重复的键。如果执行上述操作,它将减少为:
A={'11': 3, '10': 2, '12': 1}
B={'11': 2}
Run Code Online (Sandbox Code Playgroud)
但是要回答您的问题,请执行A-B(基于字典键):
all(map( A.pop, B)) # use all() so it works for Python 2 and 3.
print A # {'10': 2, '12': 1}
Run Code Online (Sandbox Code Playgroud)