Skip to main content
 首页 » 编程设计

python之字典中的频率计数——使用理解的 Python

2025年05月04日2198°冷暖

我有一本字典,想使用 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 以计算该值。