计算python中字典中某个值的出现次数?

时间:2018-01-21 21:23:38

标签: python python-3.x dictionary counting

如果我有这样的话:

D = {'a': 97, 'c': 0 , 'b':0,'e': 94, 'r': 97 , 'g':0}

如果我想要例如将“0”的出现次数计算为值而不必迭代整个列表,那是否可能以及如何?

3 个答案:

答案 0 :(得分:10)

正如我在评论中提到的,您可以在sum()函数中使用生成器,如下所示:

sum(value == 0 for value in D.values())

或者作为稍微更优化和功能性的方法,您可以使用map函数,如下所示:

sum(map((0).__eq__, D.values()))

基准:

In [56]: %timeit sum(map((0).__eq__, D.values()))
1000000 loops, best of 3: 756 ns per loop

In [57]: %timeit sum(value == 0 for value in D.values())
1000000 loops, best of 3: 977 ns per loop

请注意,尽管在这种情况下使用map函数可能会更加优化,但为了实现关于这两种方法的全面而全面的概念,您还应该为相对较大的数据集运行基准测试。然后你可以决定何时使用哪个以获得更高的性能。

答案 1 :(得分:4)

或者,使用collections.Counter

from collections import Counter
D = {'a': 97, 'c': 0 , 'b':0,'e': 94, 'r': 97 , 'g':0}

Counter(D.values())[0]
# 3

答案 2 :(得分:3)

您可以将其计算为将其转换为列表,如下所示:

D = {'a': 97, 'c': 0 , 'b':0,'e': 94, 'r': 97 , 'g':0}
print(list(D.values()).count(0))
>>3

或迭代值:

print(sum([1 for i in D.values() if i == 0]))
>>3