在字典中不使用 .values() 等方法计算值的均值
我有一个字典,长得像这样:
G={'E': 18.0, 'D': 17.0, 'C': 19.0, 'B': 15.0, 'A': 0}
我需要用一个简单的 for
循环来计算这些值的平均数,比如说 mean(18,17,19,15,0),而不使用像 .values()
、.items()
这样的内置函数。我试过下面的代码,但出现了错误:
d=[float(sum(values)) / len(values) for key, values in G]
return (d)
ValueError: need more than 1 value to unpack
有人能帮我解决这个问题吗???
10 个回答
在Python 3.4及以上版本中,有一种非常简单明了的方法:
import statistics
numbers = [G[key] for key in G]
mean_ = statistics.mean(numbers)
遍历一个字典时,其实是在遍历字典的键。你可以试着直接用 for key in G
,然后用 G[key]
来获取对应的值,而不是用 values
。
另外,你也可以使用字典的 iteritems()
方法来获取 key, value
对,比如:
d=[float(sum(values)) / len(values) for key, values in G.iteritems()]
顺便说一下,你计算平均值的方法我觉得不太对,但你可以先解决遍历的问题。
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在另一个地方使用这些数据。这个过程就像是把水从一个水桶倒到另一个水桶里。
有些时候,我们会遇到一些问题,比如数据的格式不对,或者数据不完整。这就像是你在倒水的时候,发现水桶有个洞,水流出去了一部分,最后你倒的水不够。
为了避免这些问题,我们可以使用一些工具和方法来确保数据的完整性和正确性。就像在倒水之前,先检查水桶有没有洞,确保水能顺利倒进去。
总之,处理数据的时候,要注意数据的质量,确保它们能顺利地从一个地方转移到另一个地方,这样才能保证我们的程序正常运行。
import numpy as np
np.mean(list(dict.values()))
如果你使用numpy:
import numpy as np
np.array(list(dict.values())).mean()
要用一个“简单的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)
如果你被要求避免使用字典的方法,那显然这是个学术练习。
如果没有这个限制:
标准库里的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
像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
如果我们允许使用values()
方法,那么用可迭代解包的方式会简单一些。不知道为什么其他答案没有遵循这个条件,所以我觉得我应该展示一种更有效的做法:
>>> Series([*G.values()]).mean()
13.8