变量highscores中有几个字典。我需要按其键值对其进行排序,而sorted()不起作用。
global highscores
f = open('RPS.txt', 'r')
highscores = [line.strip() for line in f]
sorted(highscores)
highscores = reverse=True[:5]
for line in f:
x = line.strip()
print(x)
f.close()
这是错误: TypeError:'bool'对象不可订阅
答案 0 :(得分:0)
sorted(v)
一个迭代器,按顺序返回v的每个元素;它不是一个清单。您可以在for循环中使用迭代器来一次处理一个元素:
for k in sorted(elements): ...
您可以转换每个元素并将结果存储在列表中:
v = [f(k) for k in sorted(elements)]
或者您可以将所有元素捕获到列表中。
v = list(k)
请注意,在上面的代码中,元素是文件中的字符串,而不是字典。
答案 1 :(得分:0)
以下应该做(我认为)你想要的事情:
with open('RPS.txt', 'r') as f: # will automatically close f
highscores = [line.strip() for line in f]
highscores = sorted(highscores, reverse=True)[:5]
for line in highscores:
print(line)
主要问题是您使用sorted()
的方式。并且,最后,而不是尝试再次迭代文件的行(这将无法工作,因为文件不是列表,不能任意迭代)上面的代码做的是排序行读取从文件中获取该列表的前5个,该列表保存在highscores
中。然后它打印出来。没有必要再次删除行,这是在首次读取文件时处理的。