我最近为我的同事创建了一个猜谜游戏,作为学习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