如果我有这样的东西:
D = {'a': 97, 'c': 0 , 'b':0,'e': 94, 'r': 97 , 'g':0}
例如,如果我想将"0"的出现次数作为一个值来计算,而不必迭代整个列表,这是可能的吗?如何计算?
如果我有这样的东西:
D = {'a': 97, 'c': 0 , 'b':0,'e': 94, 'r': 97 , 'g':0}
例如,如果我想将"0"的出现次数作为一个值来计算,而不必迭代整个列表,这是可能的吗?如何计算?
如THIS ANSWER中所述,使用operator.countOf()
是一种方法,但您也可以使用sum()
功能内的生成器,如下所示:
sum(value == 0 for value in D.values())
# Or the following which is more optimized
sum(1 for v in D.values() if v == 0)
或者,作为一种更优化、更实用的方法,您可以通过传递整数的__eq__
方法作为构造函数来使用map
函数.
sum(map((0).__eq__, D.values()))
基准:
In [15]: D = dict(zip(range(1000), range(1000)))
In [16]: %timeit sum(map((0).__eq__, D.values()))
49.6 µs ± 770 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [17]: %timeit sum(v==0 for v in D.values())
60.9 µs ± 669 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [18]: %timeit sum(1 for v in D.values() if v == 0)
30.2 µs ± 515 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [19]: %timeit countOf(D.values(), 0)
16.8 µs ± 74.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
请注意,虽然在这种情况下使用map
函数可能会更优化,但为了对这两种方法有更全面、更全面的了解,还应该对相对较大的数据集运行基准测试.然后,可以根据数据的 struct 和数量使用最合适的方法.