如何计算带有字典的元组中的所有元素?

问题描述 投票:1回答:1

我有以下列表:

lst =(1,(1,2),3,(3,4),1,3)

而且我想使用字典函数生成输出,该输出将计算每个值出现的次数,使其看起来像这样:

{{1:3,2:1,3:3,4:1}

我不知道该怎么做。谢谢!

下面是我的尝试:

def f(*args):
    for x in args:
        d = {x:args.count(x) for x in args}
    return d
python dictionary tuples
1个回答
1
投票

对于任意深度元组,可以使用递归函数进行展平:

def flatten_nested_tuples(tuples):
    for tup in tuples:
        if isinstance(tup, tuple):
            yield from flatten_nested_tuples(tup)
        else:
            yield tup

yield from x语法等同于for item in x: yield item。这只是创建生成器的一种较短的方法。您可以查看answeranswer,以获取有关生成器和yield关键字的更多信息。

要计数,我们可以使用collections.Counter来计算扁平化的元组:

collections.Counter

输出:

from collections import Counter

lst= (1,(1,2), 3, (3,4), 1, 3)

print(Counter(flatten_nested_tuples(lst)))

注意: Counter({1: 3, 3: 3, 2: 1, 4: 1}) Counter的子类,因此您可以将其视为常规字典。

如果您想在没有任何模块的情况下计算自己,则必须执行dict初始化自己:

0

或不使用counts = {} for item in flatten_nested_tuples(lst): counts[item] = counts.get(item, 0) + 1 print(counts) # {1: 3, 2: 1, 3: 3, 4: 1}

dict.get()
© www.soinside.com 2019 - 2024. All rights reserved.