python - 如何获取字典中值对象的计数?
问题描述
我正在向字典中添加键/值对,其中keys
是来自 az 的values
字符,是三元组字符,例如'aba'
, 'afa'
,'fgf'
等。
所以在这之后,我的字典可能是这样的:
my_dict = {'a': {'aaa', 'aba'}, 'b': {'bbb', 'bcb', 'bpb'}}
现在,我想打印值的总数。(在上面的例子中,它是 5)。我该怎么做呢?
当我这样做时print(len(my_dict.values())
,它会产生 2 作为输出(元素的数量),这不是我想要的。
解决方案
n_total = sum(len(v) for v in my_dict.values())
这会遍历字典的值并总结它们的长度(假设值表示序列或集合)。顺便说一句,这利用了生成器表达式。
调用map
是等效的,但速度大约是它避免与生成器表达式相关的一些开销的两倍。
n_total = sum(map(len, my_dict.values()))
这两个选项都比显式循环更 Python 和更快:
def count_len(seq):
count = 0
for elm in seq:
count += len(elm)
return count
n_total = count_len(my_dict.values())
要比较性能,您可以在 IPython 会话中运行以下命令。random
我使用如下方式初始化字典:
import random
import string
n = 100000
triplet_gen = lambda: "".join(random.choices(string.ascii_lowercase, k=3))
my_dict = { i: set(triplet_gen() for _ in range(random.randint(0,5))) for i in range(n)}
%timeit sum(len(v) for v in my_dict.values())
%timeit sum(map(len, my_dict.values()))
%timeit count_values(my_dict)
推荐阅读
- php - Laravel Mail 无法正确呈现
- azure - Azure IoT 中心 - 启用路由时,IoT 中心触发器不执行
- react-native - 需要在完成之前获得将要完成的照片的大小。世博会
- json - 在这种情况下,使用 JSON 数据的更好方法是什么?
- ios - 如何将 IOS 14 支持添加到我的 React Native 应用程序?
- vb.net - 如何在 Visual Basic 中输入变量的范围
- rust - Rust 将 trait 的实现依赖注入到另一个对象中
- c++ - 在 C++ 中为不同对象的集合提供接口的最简洁方法
- javascript - Alpine.js +flatpickr Datetimepicker 不工作
- python - 在二维列表中查找最高平均值