python - 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
为什么最后一行不等于前两行的总和?请帮忙!谢谢你。
解决方案
从文档中:
多集方法仅适用于具有正值的用例。输入可能是负数或零,但只会创建具有正值的输出。没有类型限制,但是值类型需要支持加减比较。
运算符算作一个多重集+
方法——甚至不需要涉及浮点数:
>>> 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
推荐阅读
- node.js - 为什么我不能通过热重载的 Express 后端运行 VueJS?
- haskell - -XStrict 在 GHC 中有什么作用吗?
- python-3.x - 从 Databricks 访问 ADLS Gen 2 存储
- python - Django 我如何编辑帖子?
- php - PHP shell_exec() wait and curl asynchronously and stay after exit()
- javascript - Is there a way to pause or delay an event handler in JavaScript?
- classnotfoundexception - Implements Jmeter java request : ClassNotFoundException
- android - 无法在 android 上使用 Videocapture() 读取视频文件
- c++ - 得到有符号整数溢出错误(c++)
- oracle - Add the data to the tables by using Oracle APEX