簡體   English   中英

如何用字典計算元組元組中的所有元素?

[英]How to count all elements in a tuple of tuples with dictionary?

我有以下列表:

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

我想使用字典 function generate output 來計算每個值出現的次數,它看起來像這樣:

{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

對於任意深度的元組,您可以使用遞歸 function 進行展平:

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 它只是創建生成器的一種更短的方法。 您可以查看此答案和此答案,以獲取有關生成器和yield關鍵字的更多信息。

要計數,我們可以使用collections.Counter來計算扁平元組:

from collections import Counter

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

print(Counter(flatten_nested_tuples(lst)))

Output:

Counter({1: 3, 3: 3, 2: 1, 4: 1})

注意: Counterdict的子類,因此您可以將其視為常規 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()

counts = {}
for item in flatten_nested_tuples(lst):
    if item not in counts:
        counts[item] = 0
    counts[item] += 1

print(counts)
# {1: 3, 2: 1, 3: 3, 4: 1}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM