如果我有这样的东西:

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 和数量使用最合适的方法.

Python-3.x相关问答推荐

如何有效地计算Kernel/Matrix

如何获得给定列表中所有可能的元素组合?

安装grpcio时出现错误DeproationWarning:pkg_resource

按长度和字母数字对Pandas 数据帧列进行排序

AddMultplicationEquality() 用于多个变量

向前/向后移动导致移动行的数据不可见

DataFrame列中如何迭代重复值?

如何沿单列获取嵌套列表中的唯一值?

过滤列表中的所有字典以使用特定键并忽略其他键?

使用 selenium 加速网页抓取

如何在 on_ready 事件中使用 change_presence? (discord.py)

Python多进程:运行一个类的多个实例,将所有子进程保留在内存中

无法使用 Python 和 Selenium 检索 href 属性

python中是否有大于但小于函数?

Tkinter 窗口显示(无响应)但代码正在运行

Asyncio RuntimeError:事件循环已关闭

如何将发音相似的词放在一起

在 Python 中生成马尔可夫转移矩阵

如何在 Python 3.4 中使用 pip 3?

实例变量 Python 的类型提示约定