如何根据词典中的项目计算平均值。

时间:2015-11-10 22:06:52

标签: python dictionary average

我是python的新手,所以非常感谢简化的解释!

截至目前,我的字典看起来像这样:

names = {'Bob Smith': ['5', '6', '7', '5'], 'Fred Jones': ['8', '5', '7', '5', '9'], 'James Jackson': ['5','8','8','6','5']}

我需要做以下事情:

  • 从dict中的每个条目中取最后三个项目。例如6,7,5为bob smith。
  • 根据这些值计算平均值。例如鲍勃史密斯将是6。
  • 按从高到低的顺序列出平均值(没有dict键)。

到目前为止,我在if语句中附上了以下内容:

if method == 2:
    for scores in names.items():
        score = scores[-1,-2,-3]
        average = sum(int(score)) / float(3)
        print(average)

我也看了this线程,但我仍然卡住了。

任何人都可以给我一些指示吗?

3 个答案:

答案 0 :(得分:3)

Scores[-1,-2,-3]没有获得最后三个元素。它获取字典中键(-1,-2,-3)的元素,这会在列表的情况下引发错误。 Scores[-3:]将获得最后三个元素。

获得分数时,您需要使用names.values()代替names.items()

int类型构造函数中的python字符串到整数转换不够智能,无法处理字符串列表,只能处理单个字符串。使用map(int,score)int(i) for i in score可以解决这个问题。

变量score也是元素列表名称极差的选择。

答案 1 :(得分:0)

names = {'Bob Smith': ['5', '6', '7', '5'], 'Fred Jones': ['8', '5', '7', '5', '9'], 'James Jackson': ['5','8','8','6','5']}

def avg(l):
    l = list(map(int,l))
    return sum(l[-3:])/3

avgs = []
for each in names.values():
    avgs.append(avg(each))

avgs.sort(reverse=True)
print avgs

输出:

[7, 6, 6]

答案 2 :(得分:0)

在Python3.4 +中,有一个统计模块

>>> names = {'Bob Smith': ['5', '6', '7', '5'], 'Fred Jones': ['8', '5', '7', '5', '9'], 'James Jackson': ['5','8','8','6','5']}
>>> import statistics
>>> sorted((statistics.mean(map(int, x[-3:])) for x in names.values()), reverse=True)
[7.0, 6.333333333333333, 6.0]