首页 > 解决方案 > Frequency count in a dictionary -- Python using comprehension

问题描述

I have a dictionary and would like to count the frequency using Python comprehension.

Example:

Input

{0: 'Succeeded', 1: 'Succeeded', 2: 'Failed', 3: 'Failed', 4: 'Succeeded'}

Output

{'Succeeded':3,'Failed':2}

标签: python

解决方案


而不是使用理解,只需将 aCounter应用于values您的字典。

>>> from collections import Counter
>>> d = {0: 'Succeeded', 1: 'Succeeded', 2: 'Failed', 3: 'Failed', 4: 'Succeeded'}
>>> Counter(d.values())
Counter({'Failed': 2, 'Succeeded': 3})

一般提示

具有连续整数键的字典会浪费内存。你可以只使用一个列表

my_list = ['Succeeded', 'Succeeded', 'Failed', 'Failed', 'Succeeded']

0, 1, 2, ...您可以像使用原始字典一样使用整数对其进行索引。该列表占用更少的内存,并且可以在没有散列键的情况下找到值。

在这种情况下,Counter(my_list)将构建您想要的字典。


警告下面的错误代码

可以 应该写如下的理解

>>> vals = list(d.values())
>>> {v:vals.count(v) for v in vals}
{'Failed': 2, 'Succeeded': 3}

但我强烈建议不要使用这种理解,因为与 O(n)Counter解决方案相反,它具有二次时间复杂度。对于 中的每个值valsvals迭代以计算该值。


推荐阅读