我有一个评估,我必须写一个带有分数的全名到文件,然后读回来,并能够按名称或高分排序。我已经研究了如何使用以下方法将文件读入字典:
d = {}
with open("Dr Welch.txt") as f:
d = dict(line.strip().split(None, 1) for line in f)
print(d)
但它写下这样的字典:
{'Cammy': 'MEele 4', 'Amy': 'Jones 10', 'Dave': 'Wright 5'}
当名称的第二部分应该是键的一部分时,而不是值。
答案 0 :(得分:4)
您需要从右侧拆分一次。由于您的文件似乎有不需要的空格,我可以这样做:
EnhancedCalendar
我还建议将分数转换为整数,以便于比较和算术。
答案 1 :(得分:2)
使用.rsplit()
拆分右侧的数字:
d = dict(line.strip().rsplit(None, 1) for line in f)
您还可以使用字典理解将分数转换为int
:
with open("Dr Welch.txt") as f:
d = {k: int(v) for k, v in (line.rsplit(None, 1) for line in f)}
print(d)
输出:
{'Amy Jones': 10, 'Dave Wright': 5, 'Cammy MEele': 4}
答案 2 :(得分:0)
为什么你不能只存储字典的字符串代表?然后使用ast将其转换回来?
即
import ast
with open("file.txt", "rb") as f:
for line in f:
d = ast.literal_eval(line)
并写入文件:
with open("file.txt", "wb" ad f:
f.write(str(d))
这对于相对较小的词典来说没问题,如果要存储大量的玩家我会考虑使用csv甚至是某些描述的数据库