试图从文件中写一个字典,键变成了价值

时间:2016-02-23 09:34:55

标签: python file dictionary writetofile

我有一个评估,我必须写一个带有分数的全名到文件,然后读回来,并能够按名称或高分排序。我已经研究了如何使用以下方法将文件读入字典:

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'}

当名称的第二部分应该是键的一部分时,而不是值。

3 个答案:

答案 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甚至是某些描述的数据库