在字典中不使用 .values() 等方法计算值的均值

11 投票
10 回答
61629 浏览
提问于 2025-04-17 22:23

我有一个字典,长得像这样:

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 个回答

4

在Python 3.4及以上版本中,有一种非常简单明了的方法:

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

遍历一个字典时,其实是在遍历字典的键。你可以试着直接用 for key in G,然后用 G[key] 来获取对应的值,而不是用 values

另外,你也可以使用字典的 iteritems() 方法来获取 key, value 对,比如:

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

顺便说一下,你计算平均值的方法我觉得不太对,但你可以先解决遍历的问题。

12

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在另一个地方使用这些数据。这个过程就像是把水从一个水桶倒到另一个水桶里。

有些时候,我们会遇到一些问题,比如数据的格式不对,或者数据不完整。这就像是你在倒水的时候,发现水桶有个洞,水流出去了一部分,最后你倒的水不够。

为了避免这些问题,我们可以使用一些工具和方法来确保数据的完整性和正确性。就像在倒水之前,先检查水桶有没有洞,确保水能顺利倒进去。

总之,处理数据的时候,要注意数据的质量,确保它们能顺利地从一个地方转移到另一个地方,这样才能保证我们的程序正常运行。

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

如果你使用numpy:

import numpy as np

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

要用一个“简单的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

撰写回答