如果我有这样的话:
D = {'a': 97, 'c': 0 , 'b':0,'e': 94, 'r': 97 , 'g':0}
如果我想要例如将“0”的出现次数计算为值而不必迭代整个列表,那是否可能以及如何?
答案 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