我有一个类似的字典:
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
有人可以帮我解决这个问题????
答案 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}