首页 > 解决方案 > Counter(dict1)+Counter(dict2) 给出错误答案

问题描述

from Q import *
from collections import Counter

#Q1, Q2 are dictionaries which are imported from Q.py
Q1 = Counter(Q1)
Q2 = Counter(Q2)
Q = Q1+Q2

ene = 0.0
for k,v in Q1.items():
    ene += v
print(ene)

ene = 0.0
for k,v in Q2.items():
    ene += v
print(ene)

ene = 0.0
for k,v in Q.items():
    ene += v
print(ene)

然后运行代码,我得到了输出:

-6.81022233745
0.0
39542.4622651

为什么最后一行不等于前两行的总和?请帮忙!谢谢你。

标签: python

解决方案


文档中:

多集方法仅适用于具有正值的用例。输入可能是负数或零,但只会创建具有正值的输出。没有类型限制,但是值类型需要支持加减比较。

运算符算作一个多重集+方法——甚至不需要涉及浮点数:

>>> Counter() + Counter({'a': -5})
Counter()

另一种选择可能是defaultdict(float)

from Q import Q1, Q2
from collections import defaultdict

Q = defaultdict(float, Q1)

for k, v in Q2.items():
    Q[k] += v

推荐阅读