【问题标题】:Percentage difference between two counter objects两个计数器对象之间的百分比差异
【发布时间】:2021-11-24 09:41:06
【问题描述】:

我有两个这样的计数器对象:

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'

任何建议将不胜感激!

【问题讨论】:

  • A1 中但 A2 中没有的键的值应该是多少?

标签: python counter


【解决方案1】:

无需额外的模块导入:-

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)

【讨论】:

    【解决方案2】:

    一种方法是使用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 确实会减去计数,但只会保留正值的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多