我有一本字典,想使用 Python 理解来计算频率。
例子:
输入
{0: 'Succeeded', 1: 'Succeeded', 2: 'Failed', 3: 'Failed', 4: 'Succeeded'}
输出
{'Succeeded':3,'Failed':2}
请您参考如下方法:
不用推导式,只需应用 Counter到字典的 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 以计算该值。
