我有一本字典,看起来像:
G={'E': 18.0, 'D': 17.0, 'C': 19.0, 'B': 15.0, 'A': 0}
Run Code Online (Sandbox Code Playgroud)
我用一个简单的发现平均的值如平均值(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
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题吗????
为此,请使用约束条件而不是使用dict方法来实现“简单的for循环”:
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)
Run Code Online (Sandbox Code Playgroud)
如果您应该避免使用dict方法,那么显然这是一项学术练习。
没有这个约束:
statistics标准库中的模块有一个mean方法,这是我的第一个想法(因为标准库不需要第三方软件包。):
>>> G={'E': 18.0, 'D': 17.0, 'C': 19.0, 'B': 15.0, 'A': 0}
>>> from statistics import mean
>>> mean(G[k] for k in G)
13.8
Run Code Online (Sandbox Code Playgroud)
诸如numpy和pandas之类的第三方程序包具有带mean方法的对象:
>>> from numpy import array
>>> array([G[k] for k in G]).mean()
13.8
>>> from pandas import Series
>>> Series([G[k] for k in G]).mean()
13.8
Run Code Online (Sandbox Code Playgroud)
如果我们允许自己使用该values()方法,则可迭代拆包会变得更加简单。由于某些原因,其他答案违反了该条件,所以我认为我应该展示一种更有效的方法:
>>> from numpy import array
>>> array([G[k] for k in G]).mean()
13.8
>>> from pandas import Series
>>> Series([G[k] for k in G]).mean()
13.8
Run Code Online (Sandbox Code Playgroud)
小智 6
如果您使用numpy:
import numpy as np
np.array(list(dict.values())).mean()
Run Code Online (Sandbox Code Playgroud)