查找字典中值的平均值

时间:2014-03-14 21:56:37

标签: python

我有一个类似的字典:

G={'E': 18.0, 'D': 17.0, 'C': 19.0, 'B': 15.0, 'A': 0}

我必须找到值的平均值,例如mean(18,17,19,15,0)使用简单的for循环而不使用内置函数,如.values().items()等。我尝试了以下但是收到了错误:

d=[float(sum(values)) / len(values) for key, values in G]
    return (d)   
ValueError: need more than 1 value to unpack

有人可以帮我解决这个问题????

10 个答案:

答案 0 :(得分:5)

如果您使用numpy:

import numpy as np

np.array(list(dict.values())).mean()

答案 1 :(得分:4)

要使用“简单for循环”,使用约束来使用dict方法:

G={'E': 18.0, 'D': 17.0, 'C': 19.0, 'B': 15.0, 'A': 0}


count = 0
_sum = 0
for key in G:
    count += 1
    _sum += G[key]

print('this is the mean: ', _sum/count)

答案 2 :(得分:4)

在Python 3.4中,有一个非常明确的方法:

import statistics
numbers = [G[key] for key in G]
mean_ = statistics.mean(numbers)

答案 3 :(得分:3)

对字典的迭代会迭代其键。尝试使用for key in G,然后恰当地使用G[key]代替values

或者,使用字典的iteritems()方法从G中获取key, value对,即:

d=[float(sum(values)) / len(values) for key, values in G.iteritems()]

(为了记录,你计算平均值的实际方法对我来说不合适,但你也可以先修复迭代问题。)

答案 4 :(得分:1)

使用G.values()从字典中获取所有值。

G = {'E': 18.0, 'D': 17.0, 'C': 19.0, 'B': 15.0, 'A': 0}
d = float(sum(G.values())) / len(G)
print (d)

这会打印13.8

请注意,Python 2和Python 3之间存在差异。在Python 2中,G.values()是一个新构造的值列表。在Python 3中,它是一个生成器,可以被认为是一个“惰性列表”。在Python 2中,同样的事情被称为G.itervalues()

答案 5 :(得分:0)

你想:

mean = sum([G[key] for key in G])/float(len(G))

您的原始代码也会生成:

TypeError: 'int' object is not iterable

当您尝试对值进行求和时。

答案 6 :(得分:0)

另一个for循环,这个不需要项目的计数器。

G = {'E': 18.0, 'D': 17.0, 'C': 19.0, 'B': 15.0, 'A': 0}

sum = 0
for k in G:
    sum += float(G[k])

print "Mean: " + str(sum/len(G))

结果:

Mean: 13.8
[Finished in 0.3s]

实际上,根据您的数据,无需使用float。在我的结尾,删除float并且只是离开sum += G[k]仍然输出相同的值,因为值无论如何都不是字符串。

答案 7 :(得分:0)

我建议而不是当前的答案是采用可重用且灵活的函数式编程范例。例如,创建一个函数来计算简单list中包含的dict值的任何统计信息:

def summarize_dict(dictionary, function):
        dict_new = {}
    for k,v in dictionary.items():
        dict_new[k] = function(v)
    return dict_new

测试:

import numpy as np

keys = ["a","b","c","d","e"]
values = [range(2),range(4),range(6),range(8),range(10)]
dictionary = dict(zip(keys, values))

summarize_dict(dictionary, np.mean)

收率:

{'a': 0.5, 'b': 1.5, 'c': 2.5, 'd': 3.5, 'e': 4.5}

答案 8 :(得分:0)

import numpy as np
np.mean(list(dict.values()))

答案 9 :(得分:0)

假设您有一个包含多个键的字典,每个键都有一个值列表:

your_averaged_dictionary = {key: np.mean(values) for key, values in your_dictionary}