python - 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}
解决方案
而不是使用理解,只需将 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
解决方案相反,它具有二次时间复杂度。对于 中的每个值vals
,vals
迭代以计算该值。
推荐阅读
- android - 找不到要加载的 DSO:libjscexecutor.so
- python - ValueError:形状为 (32, 3) 的目标数组被传递为形状 (None, 2) 的输出,同时用作损失`binary_crossentropy`。在 Keras 模型中
- java - 如何从自定义列表视图中获取特定视图和更改属性?
- r - 在 ggplot 上标记 inf 和 -inf 值
- c++ - 有效地从文本文件中读取带有字符串索引的巨大二维数组(矩阵)
- javascript - 未使用预加载的图像
- laravel - Laravel Echo (Server) Socket IO - 从 HTTP 切换到 HTTPS
- javascript - 使用 Karma 设置自定义浏览器安装
- typescript - 不再可能将数据类型映射到 TypeScript 中的函数参数?
- aws-sdk - 使用 boto3 创建 AWS 资源组