2013-05-31 82 views
10

Python 3.3,這是一個包含鍵值對的字典。Python中計算項目的字典值是一個列表

d = {'T1': ['eggs', 'bacon', 'sausage']} 

這些值是可變長度的列表,我需要迭代列表項。這工作:

count = 0 
for l in d.values(): 
    for i in l: count += 1 

但它是醜陋的。必須有更多的Pythonic方式,但我似乎無法找到它。

len(d.values()) 

產生1.它是1個列表(DUH)。來自here的計數器的嘗試給出'不可干擾類型'錯誤。

回答

35

使用sum()每個字典值的長度:

count = sum(len(v) for v in d.itervalues()) 

如果您正在使用Python 3,那麼就使用d.values()

快速演示您的輸入樣本和礦山之一:

>>> d = {'T1': ['eggs', 'bacon', 'sausage']} 
>>> sum(len(v) for v in d.itervalues()) 
3 
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']} 
>>> sum(len(v) for v in d.itervalues()) 
7 

一個Counter不會幫助你在這裏多,你是不是創建每個條目的計數,你計算的總長度所有值。

+0

謝謝!非常有幫助,照常:) – RolfBly

7
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']} 
>>> sum(map(len, d.values())) 
7 
0

我一直在尋找答案,當我發現這個主題,直到我意識到我已經在我的代碼中使用了這個東西。這是我想出了:

count = 0 

for key, values in dictionary.items(): 
     count = len(values) 

如果你想保存計數,你可以創建一個新的字典來保存計數爲每個鍵每個單詞表項。

count = {} 

for key, values in dictionary.items(): 
     count[key] = len(values) 

我不能準確找到該版本的方法是可行的,但我認爲.items方法只在Python 3

0

可以做的樹我的功課,我想出了這一點。至少(我知道)它可以更簡單一步,但對於初學者(比如我)來說,理解這個版本可能更容易。

dict = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['bread', 'butter', 'tosti']} 

total = 0 

for value in dict: 
    value_list = dict[value] 
    count = len(value_list) 
    total += count 

print(total) 
相關問題