首页 > 解决方案 > 如何获取字典中值对象的计数?

问题描述

我正在向字典中添加键/值对,其中keys是来自 az 的values字符,是三元组字符,例如'aba', 'afa','fgf'等。

所以在这之后,我的字典可能是这样的:

my_dict = {'a': {'aaa', 'aba'}, 'b': {'bbb', 'bcb', 'bpb'}}

现在,我想打印值的总数。(在上面的例子中,它是 5)。我该怎么做呢?

当我这样做时print(len(my_dict.values()),它会产生 2 作为输出(元素的数量),这不是我想要的。

标签: pythondictionary

解决方案


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)

推荐阅读