Python- 如何在字典中找到多个值/键的平均值

6
我有一个类似于这样的字典. . .
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])

但是我遇到了“too many values to unpack”错误,有什么想法吗?我认为也可以通过将字典转换为列表,并使用len和sum命令从列表中找到平均值,然后再将其转换回字典来完成,但我不太清楚如何操作。谢谢,我觉得这应该很容易。

3个回答

5

1
在Python 2.x中,使用.iteritems() - inspectorG4dget
1
@inspectorG4dget,.items()实际上更好,因为它是“Python 3证明”的,除非您真的需要针对大值列表进行优化。 - Ben Hoyt
@BenHoyt:这就是2to3工具的作用。我应该也把所有的打印语句用括号括起来吗? - Eric
3
@Eric:如果使用from __future__ import print_function :P(抱歉,你刚刚选择了一个错误的例子) - lqc

0
    python 3.2

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

0

for x in dictionary: ... 迭代字典的键。

除非键本身是元组,否则 for a, b in dictionary 会出错,因为它试图将键解包成两个值。

对于迭代字典,您应该使用 items(), keys(), 和 values() (或者在 Python 2.x 中使用它们的 iter* 等效方法)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接