2012-12-02 43 views
6

我有一本看起來像這樣的字典。 。 。Python-如何在字典中找到多個值/鍵的平均值

CombinedDict = {'Abamectin': [63, 31, 53], 'Difenzoquat metilsulfate': [185, 49, 152], 'Chlorpyrifos': [14, 26, 56], 'Dibutyl phthalate': [25, -17, -18] 

等等。總共我有48個不同的鑰匙。

我想要得到的是三個數字的平均值。所以我會得到一個看起來像這樣的字典。 。 。

AvgDictName = {'Abamectin': [49], 'Difenzoquat metilsulfate': [128], 'Chlorpyrifos': [32], 'Dibutyl phthalate': [-3] . . . 

我一直在使用這種線

AvgDictName = dict([(key, float(sum([int(i) for i in values]))/len(values)) for key, values in CombinedDict]) 

嘗試,但我越來越值過多解壓錯誤 任何想法?我認爲這也可以通過將字典列入列表並使用len和sum命令從列表中找到平均值,然後轉換回字典來完成,但我真的不知道該怎麼去做。謝謝,我有一種感覺,這應該很容易。

回答

5

你需要的,如果你想解壓到key, values

+1

'.iteritems()'爲Python 2.x的 – inspectorG4dget

+1

@ inspectorG4dget,' .items()實際上更好,因爲它是「Python 3證明」,除非你真的需要爲大值列表進行優化。 –

+0

@BenHoyt:這就是2to3工具的用途。我是否也應該將所有的打印語句都放在括號內? – Eric

0

for x in dictionary: ...遍歷一個字典的鍵在CombinedDict.items()CombinedDict.iteritems()進行迭代。

除非密鑰本身是元組,否則for a, b in dictionary將會出錯,因爲它試圖將密鑰解包爲兩個值。

對於迭代字典,你應該使用items()keys()values()(或他們的iter*等價物在Python 2.x中)

0
python 3.2 

    >>> [(i,sum(v)//len(v)) for i,v in t.items()] 
相關問題