我试图按照从高到低的顺序打印出平均值,但是到目前为止,我所拥有的代码是每个人的平均值,但是我无法按照最高的顺序将它们打印出来。最低。我尝试使用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]}
答案 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.itemgetter和sorted做了什么。
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))