我最近爲我的同事創建了一個猜謎遊戲,作爲學習Python 3.3x的項目。我一直在存儲的名稱和得分格式的文本文件,用冒號分隔的結果,如圖所示...在Python中爲每個密鑰存儲最多5個值字典
Adam:12
Dave:25
Jack:13
Adam:34
Dave:23
文本文件閱讀下面的代碼,這要歸功於帕德里克·坎寧安。
from collections import defaultdict
d = defaultdict(list)
with open('guesses.txt') as f:
for line in f:
name,val = line.split(":")
d[name].append(int(val))
for k in sorted(d):
print(k," ".join(map(str,d[k])))
現在的問題是,我想看看戴夫,亞當和傑克的最近四個分數。我想到的一種方法是以某種方式讀取上面的列表並將其反轉,以便它能夠首先看到最近的結果。我以爲我可以先逆字典,使用下面的代碼行:
inv_map = {v: k for k, v in d.items()}
但是,這並不工作,因爲它會返回錯誤:
TypeError: unhashable type: 'list'
正如我想存儲4個最最近的結果,那麼我需要確保每次新結果到達時都刪除最舊的結果,並更新字典。
我該如何確保每個鍵只能分配4個最大值?這可以通過顛倒字典來完成嗎?我試圖看看其他問題是否遵循同樣的原則,但我還沒有發現任何東西。
注意我已經看到了itemgetter方法,但是我對每個鍵都有一個以上的值。
文本文件會出現這樣的:
Adam:12
Dave:25
Jack:13
Adam:34
Dave:23
Jack:17
Adam:28
Adam:23
Dave:23
Jack:11
Adam:39
Dave:44
Jack:78
Dave:38
Jack:4
[A用戶評分節約計劃]的可能重複(http://stackoverflow.com/questions/28326725/a-user-score-saving-program) – 2015-02-08 08:14:00
正如你可以重複看到,你可以序列化到文件真正的Python對象(在你的情況下,這將是一個字典 - >列表字典),這應該使這**更容易。 – 2015-02-08 08:14:34