如何找到具有多个值的键的平均值?

时间:2015-02-23 18:28:34

标签: python max average

我试图按照从高到低的顺序打印出平均值,但是到目前为止,我所拥有的代码是每个人的平均值,但是我无法按照最高的顺序将它们打印出来。最低。我尝试使用max功能,但它不起作用。

for usernames, valuesforusers in sorted(dictionary.items()):
            thefirstaveragevariable = sum(valuesforusers)/len(valueforusers)
            averageslistofdoom = []
            averageslistofdoom.append(average)
            print ("{} Scoreino ploxerino thankerino: {}".format(usernames,max(averagesofdoom)))

字典会这样:

Thomas Scored: 8
Louie Scored: 3
Thomas Scored: 4
Louie Scored: 5
Louie Scored: 2

名称是关键,而得分是值。如果需要,我可以发布分裂循环。所以打印出字典会是这样的:

{'Louie Scored': [3, 5, 2], 'Thomas Scored': [8, 4]}

2 个答案:

答案 0 :(得分:0)

使用numpy ...还必须提供按键排序

import numpy as np
print sorted((username,np.average(values),values) for username, values in d.items(), key=lambda x:x[1])

默认排序将根据第一个元素对元组进行排序...在此示例中,它是它们的名称。

您可以将第一个元素设为平均值,然后您就不需要提供密钥

答案 1 :(得分:0)

所以我要做的是创建一个包含用户平均值的中间字典,然后显示已排序。您可能想看看operator.itemgettersorted做了什么。

import operator

dictionary = {
    'Louie Scored': [3, 5, 2],
    'Thomas Scored': [8, 4]
}

averages = {}

for user_info, v in dictionary.items():
    average = float(sum(v))/len(v)
    averages[user_info] = average

sorted_averages = sorted(averages.items(), key=operator.itemgetter(1), reverse=True)
for user_name, average in sorted_averages:
    print ("{} average score {}".format(user_name, average))

哪个输出:

Thomas Scored average score 6.0
Louie Scored average score 3.33333333333

当你拥有dict并在{{{}}上调用items()这一事实时,可以更加简短(避免中间字典)。 1}},你得到2元素元组,其中元组的第一个元素是键(你的用户名),第二个元素是值(用户名的分数) 。当您使用dict致电sorted时,dictionary.items()将会收到这些2元组元素,因此在lambda中,lambda x将是元组的第一个元素(x用户名,第二个元素x[0]是该用户名的分数):

x[1]

哪个输出:

dictionary = {
    'Louie Scored': [3, 5, 2],
    'Thomas Scored': [8, 4]
}

for username, values in sorted(dictionary.items(),
                               key=lambda x: (sum(x[1]) / len(x[1])), reverse=True):
    print "username: %s, values %s" % (username, sum(values) / len(values))