2016-05-05 58 views
0

這不是一個重複的代碼被寫入的方式使我不可能使用我研究堆棧溢出的方法。打印字典值從最高到最低

  1. 我有一本字典,像這樣:

    class_dictionary: {'John':[2,3,4], 'Mark':[6,9,4], 'James':[0,0,0]} 
    

    我需要爲每個角色最高到最低的最高值打印的名稱。我已經寫過這個:

    for names, scores in class_dictionary.items(): 
         print("{} : {}".format(names, max(scores))) 
    

    這打印出每個學生的最高價值,但不是按順序。就像這樣:

    John: 4 
    James: 0 
    Mark: 9 
    

    所需的輸出:

    Mark: 9 
    John: 4 
    James: 0 
    

    我怎麼會打印出這些結果最高到最低?

  2. 我有一本字典,像這樣:

    class_dictionary: {'John':[2,3,4], 'Mark':[6,9,4], 'James':[0,0,0]} 
    

    我需要爲每個人最高到最低的平均值打印的名稱。我已經寫過這個:

    pprint({k: [sum(float(i) for i in v)/len(v)] for k, v in class_dictionary.items()}) 
    

    這打印出每個學生的平均值,但不是按順序。像這樣:

    John: 3 
    Mark: 6.33333 
    James: 0 
    

    如何將這些結果從最高到最低打印出來?

    所需的輸出:

    Mark: 6.33333 
    John: 2 
    James: 0 
    

如果你去投票了,請解釋原因,這樣我可以提高下一個時間問題。

回答

0

商店最大的臨時字典和值,那麼那種又

class_dictionary= {'Jhon':[2,3,4], 'Mark':[6,9,4], 'James':[0,0,0]} 

tmp = {} 
for names, scores in class_dictionary.items(): 
    tmp[names] = max(scores) 

print sorted(tmp.items(), reverse=True, key=lambda (k,v) : v) 

你得到上面的想法。試試你的第二個問題,併發布你已走了多遠,什麼不工作。

0
import pandas as pd 

class_dictionary = {'Jhon':[2,3,4], 'Mark':[6,9,4], 'James':[0,0,0]} 

test_df = pd.DataFrame(class_dictionary) 

max_df = test_df.max().sort_values(ascending = False) 
print max_df 

mean_df = test_df.mean().sort_values(ascending = False) 
print mean_df 
2

你只需要排序在打印之前:

d = {'John': [2,3,4], 'Mark': [6,9,4], 'James': [0,0,0]} 

# Both of the lists below can be generators as well, just change surrounding [] to() 
# Generate a list containing names and highest scores only 
highest_scores = [(name, max(scores)) for (name, scores) in d.items()] 
# Generate a list containing names and averages only 
averages = [(name, sum(scores)/float(len(scores))) for (name, scores) in d.items()] 

# Every item is a tuple of name and score, so sort by item[1] (which is the score) 
sort_key = lambda item: item[1] 

for name, score in sorted(highest_scores, key=sort_key, reverse=True): 
    print("%s: %d" % (name, score)) 

for name, avg in sorted(averages, key=sort_key, reverse=True): 
    print("%s: %f" % (name, avg)) 

此打印:

Mark: 9 
John: 4 
James: 0 
Mark: 6.333333 
John: 3.000000 
James: 0.000000