2016-03-19 175 views
0

我的字典裏是這樣的:我如何從一個存儲python字典中多個值的鍵訪問值?

{James: [10, 7, 9], 'Bob': [3, 8, 4], 'Charles': [6, 2, 5]} 

我想要做的是,輸出每個用戶在誰的順序得分拿到了最高分。和他們的名字。此刻,我只能打印分數最高的學生:

inverse = [(value, key) for key, value in score_dict.items()] 

print (max(inverse)[1]) 

輸出是:

James 

,我想獲得的輸出是:

James 10 

Bob 8 

Charles 6 
+0

'print(「\ n」.join(inv [1] for inv in sorted(inverse)))' – zondo

+1

未來的單詞:好像你不想從鍵中移除一個值,而是你想*訪問*它。如果你刪除了一個值,它不再在列表中,但是如果你訪問它,你只需要獲得它的值並將它保留在列表中。我爲你編了一個編輯。 – BHustus

+0

是否要將每個人的最高分存儲到新的字典或其他內容中,還是隻打印每個人的最高分?因爲對於後者,你可以簡單地在score_dict.items()中輸入k,v:print(k,max(v))'。 – Reti43

回答

0

您可以使用userwise highscore創建一個元組列表,然後使用score對它進行排序。像這樣的,

x = {'James': [10, 7, 9], 'Bob': [3, 8, 4], 'Charles': [6, 2, 5]} 
y = [(k, max(v)) for k, v in x.items()] 
for k, v in sorted(y, key=lambda a: a[1], reverse=True): 
    print (k, v) 
+0

謝謝@Muctadir!有用。但是,請您評論一下,以便我確信每行中特別是第3行發生了什麼。爲什麼會創建這麼多變量? – Minions

1

你根本不需要反字典;你並沒有試圖找到單人最高分全部的學生;相反,你想找到每個學生的最高分。

要做到這一點,做到以下幾點:

scores = {'James': [10, 7, 9], 'Bob': [3, 8, 4], 'Charles': [6, 2, 5]} 
for name in scores.keys: 
    print(name + " " + str(max(scores[name]))) 

這就避免了一個新字典的需要。其中最複雜的部分是str(max(scores[name])),它從最裏面到最外面讀取:「取名字,找到名字的分數列表,在他們的分數中找到最大值,然後將其轉換爲字符串」。

+0

我試圖找到每個學生的最高分數。並且由於數據已從文件(已轉換爲csv文件)放入字典中,因此該文件不是'可以支持的' – Minions

+0

我相信我的代碼示例*會*返回每個學生的最高分數......而且我不相信我理解你的意思是「不可贖回」。請詳細說明?如果文件已經在字典中,我不確定爲什麼它會影響我的代碼示例。 – BHustus

相關問題