两个计数器对象之间的百分比差异

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)