如果我有这样的东西:

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函数可能会更优化,但为了对这两种方法有更全面、更全面的了解,还应该对相对较大的数据集运行基准测试.然后,可以根据数据的结构和数量使用最合适的方法.

Python-3.x相关问答推荐

使用 pandas 数据帧映射到中转(节点)点的跨容量请求

Pandas 值列中列表中元素的计数

删除括号和大括号中不必要的空格

魔术8球txt文件列表

Pandas数据单调行为

Python选择将整数除法向负无穷大的数学原因是什么?

Python 3.9.8 使用 Black 并导入 `typed_ast.ast3` 失败

Youtube_dl:错误:YouTube 说:无法提取视频数据

如何用 matplotlib 画一条线?

尾部斜杠的 FastAPI 重定向返回非 ssl 链接

如何在不更改任何默认值的情况下在 Ubuntu 上为 python 3.8 安装 pip?

Discord.py 错误:TypeError:__new__() 得到了意外的关键字参数“deny_new”

在 Ipython 中使用 Pylint (Jupyter-Notebook)

Python 多行 with 语句

使用 pytest 的“间接fixture ”错误.怎么了?

virtualenv virtualenvwrapper virtualenv:错误:无法识别的参数:--no-site-packages

“with”语句是否支持类型提示?

有没有办法从 dict 和 collections.abc.MutableMapping 一起继承?

如何提高数据输入管道性能?

Python中基于字符串的枚举