2012-10-20 110 views
5

的我的形式的字典:平均元組

{"a":(1, 0.1) , "b":(2, 0.2) , ...} 

每個括號是對應於(得分,標準偏差)的元組。 我如何取每個元組中的第一個整數的平均值? 我已經試過這樣:

for word in d: 
    (score, std) = d[word] 
    d[word]=float(score),float(std) 
    if word in string: 
     number = len(string) 
     v = sum(score) 
     return (v)/number 

得到這個錯誤:

v = sum(score) 
TypeError: 'int' object is not iterable 

回答

7

很容易使用list comprehensions做。首先,您可以從d.values()獲取所有字典值。要列出每個值中的第一項,請列出一個列表,如[v[0] for v in d.values()]。然後,只需把這些元素的總和,除以在字典中的項目數:

sum([v[0] for v in d.values()])/float(len(d)) 

至於佩德羅正確地指出,這實際上創建列表,然後做的總和。如果你有一本巨大的字典,這可能會佔用大量內存並且效率低下,所以你需要一個generator expression而不是一個列表理解。在這種情況下,只是意味着擺脫一對括號的:

sum(v[0] for v in d.values())/float(len(d)) 

這兩種方法進行了比較in another question

+2

你實際上並不需要列表理解,sum會採用任何可迭代的方式,所以在sum(v [0] for v in d.values())中的生成器表達式將不會創建中間列表。 –

+0

優秀點。我只是認爲建立這樣的表達更清楚一些。 – Mike