Skip to main content
 首页 » 编程设计

python之从字典中减去元素

2025年05月04日10lyhabc

我有两本字典,比方说:

dict_a = {"A": 3.0, "C": 4.0, "B": 6.0} 
dict_b = {"A": 3.0, "C": 5.0, "D": 1.0} 

我想计算一个减法 dict_a - dict_b 所以输出给我:

{"A": 0.0, "B": 6.0, "C": -1.0, "D": -1.0} 

谷歌搜索了一段时间我看到有人使用 Counter 来执行这样的操作,但是做一些简单的事情

dict(Counter(dict_a) - Counter(dict_b)) 

只给我

{"A": 0.0, "B": 6.0} 

即,如果 key 不在 dict_a 中,则它不会出现在输出中。

到目前为止,我已经管理了以下解决方案:

dict_b2 = dict_b.copy() 
dict_c = {} 
for i in dict_a.keys(): 
   dict_c.update({i: dict_a[i] - dict_b2.pop(i,0.0)}) 
   # Changes sign to the remaining values from dict_b2 
dict_c.update({k: 0.0 - v for k, v in dict_b2.iteritems()}) 

但我知道必须有一种更优雅、更高效的方式来做到这一点。

有什么想法吗?

请您参考如下方法:

原来 Counter 有一个(没有很好的记录)subtract方法:

>>> dict_a = {"A": 3.0, "C": 4.0, "B": 6.0} 
>>> dict_b = {"A": 3.0, "C": 5.0, "D": 1.0} 
>>> from collections import Counter 
>>> a = Counter(dict_a) 
>>> a.subtract(dict_b) 
>>> a 
Counter({'B': 6.0, 'A': 0.0, 'C': -1.0, 'D': -1.0}) 

请注意,这不受强加于 Counter.__sub__ 的“没有小于 0 的值”约束的影响,但它确实执行了 就地 操作.

有点酷的是,我不必将两个 指令都转换为一个计数器——只需将操作左侧的一个。