2015-02-23 51 views
0

我試圖按照從高到低的順序打印出平均值,但是到目前爲止,我所使用的代碼並不是每個人的平均值,然而我無法按照從最高到最低的順序將其打印出來。我嘗試使用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 

名稱是關鍵,而分數值。如果需要的話我可以發表分裂loop.So打印出來字典會是這樣的:

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

如何'D'是什麼樣子?你可以發表一個例子嗎? – BorrajaX 2015-02-23 18:32:48

+0

您不能與同一字典中的不同鍵具有相同的「Louie Scored」字符串。你可以粘貼'print dictionary'的輸出嗎? – BorrajaX 2015-02-23 18:40:24

+0

@BorrajaX完成:) – 2015-02-23 18:44:22

回答

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並就dict調用items() ,您將得到2元組元素,其中元組的第一個元素是鍵(您的用戶名),第二個元素是值(用戶名的分數)。當你調用sorteddictionary.items(),所述lambda會在lambda x要接收這些2元組的元素,所以,該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)) 

,輸出:

username: Thomas Scored, values 6 
username: Louie Scored, values 3 
+0

感謝您幫助我不僅找出問題,而且然後解釋它這樣的細節:) – 2015-02-23 20:04:32

+0

很高興我幫了忙。玩得開心編碼**: - )** – BorrajaX 2015-02-23 20:10:28

0

使用numpy的......你也必須提供一個關鍵的

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

默認排序排序將根據元素的第一個元素對元組進行排序......在這個例子中,它是他們的名字。

可以使第一要素的平均代替,然後你就不需要提供一鍵

+0

有沒有不使用'lambada'函數的方法? – 2015-02-23 18:35:38

+0

肯定寫一個非lambda函數,或使用'operator.itemgetter'或把平均值作爲第一個值在元組中...而不是第二個 – 2015-02-23 18:37:04