两个计数器对象之间的百分比差异
Percentage difference between two counter objects
我有两个像这样的计数器对象:
A1 = {‘word1’: 7, ‘word2’: 5, ‘word3’: 4}
A2 = {‘word1’: 3, ‘word2’: 2, ‘word3’: 4}
我想计算两个计数器之间的百分比差异,以获得如下内容:
R = {‘word1’: -57.1, ‘word2’: -60, ‘word3’: 0}
我试过这个解决方案,但它给我错误
R = ((A2 - A1) / A1) * 100
TypeError: unsupported operand type(s) for /: 'Counter' and 'Counter'
如有任何建议,我们将不胜感激!
一种方法是使用 dictionary comprehension:
from collections import Counter
A1 = Counter({'word1': 7, 'word2': 5, 'word3': 4})
A2 = Counter({'word1': 3, 'word2': 2, 'word3': 4})
res = {key: (A2.get(key, 0) / value - 1) * 100 for key, value in A1.items()}
print(res)
输出
{'word1': -57.14285714285714, 'word2': -60.0, 'word3': 0.0}
另一种方法是使用相同的推导式,但只给出位于 Counter 对象交集的结果:
# A1 with an extra key
A1 = Counter({'word1': 7, 'word2': 5, 'word3': 4, 'word4': 5})
A2 = Counter({'word1': 3, 'word2': 2, 'word3': 4})
res = {key: (A2[key] / value - 1) * 100 for key, value in A1.items() if key in A2}
print(res)
输出
{'word1': -57.14285714285714, 'word2': -60.0, 'word3': 0.0}
请注意 A2 - A1
确实会减去计数,但只会保留正值的结果。
不借助额外的模块导入:-
A1 = {'word1': 7, 'word2': 5, 'word3': 4}
A2 = {'word1': 3, 'word2': 2, 'word3': 4}
r = {}
for k, v in A1.items():
r[k] = (A2[k] - v) / v * 100
print(r)
我有两个像这样的计数器对象:
A1 = {‘word1’: 7, ‘word2’: 5, ‘word3’: 4}
A2 = {‘word1’: 3, ‘word2’: 2, ‘word3’: 4}
我想计算两个计数器之间的百分比差异,以获得如下内容:
R = {‘word1’: -57.1, ‘word2’: -60, ‘word3’: 0}
我试过这个解决方案,但它给我错误
R = ((A2 - A1) / A1) * 100
TypeError: unsupported operand type(s) for /: 'Counter' and 'Counter'
如有任何建议,我们将不胜感激!
一种方法是使用 dictionary comprehension:
from collections import Counter
A1 = Counter({'word1': 7, 'word2': 5, 'word3': 4})
A2 = Counter({'word1': 3, 'word2': 2, 'word3': 4})
res = {key: (A2.get(key, 0) / value - 1) * 100 for key, value in A1.items()}
print(res)
输出
{'word1': -57.14285714285714, 'word2': -60.0, 'word3': 0.0}
另一种方法是使用相同的推导式,但只给出位于 Counter 对象交集的结果:
# A1 with an extra key
A1 = Counter({'word1': 7, 'word2': 5, 'word3': 4, 'word4': 5})
A2 = Counter({'word1': 3, 'word2': 2, 'word3': 4})
res = {key: (A2[key] / value - 1) * 100 for key, value in A1.items() if key in A2}
print(res)
输出
{'word1': -57.14285714285714, 'word2': -60.0, 'word3': 0.0}
请注意 A2 - A1
确实会减去计数,但只会保留正值的结果。
不借助额外的模块导入:-
A1 = {'word1': 7, 'word2': 5, 'word3': 4}
A2 = {'word1': 3, 'word2': 2, 'word3': 4}
r = {}
for k, v in A1.items():
r[k] = (A2[k] - v) / v * 100
print(r)