我目前有一些数据存储在一个文件中,该文件中有一个人名和他们在玩游戏时得到的分数。
文件中的数据如下所示:
Reece 0
John 5
Alex 2
我尝试过这样的事情:
with open("Scores.txt","r") as f:
lines = sorted(f.readlines())
print lines
但是,只需按照每个名字的第一个字母对它们进行排序。
我的输出必须是这样的:
Reece 0
Alex 2
John 5
这是一个相对简单的程序,我使用的是Python 2.7
任何帮助都会很棒我也可以提供有关我程序的任何信息!
答案 0 :(得分:2)
密钥可以这样工作:
with open("test.txt","r") as f:
lines = sorted(iter(f), key=lambda x: int(x.partition(" ")[-1]))
print lines
由于你只创建了一个列表,因此它将具有内存效率,而且当你在文件的行上只迭代一次时,它会非常快。
总的来说,我认为这是最快,最有效的方法。
因此包括输出在内的完整功能将是:
with open("test.txt","r+") as f:
lines = sorted(iter(f), key=lambda x: int(x.partition(" ")[-1]))
f.seek(0)
f.truncate()
[f.write(l if l.endswith("\n") else l + "\n") for l in lines]
答案 1 :(得分:0)
添加cmp参数调用sorted
:
with open("test.txt","r") as f:
comparator = (lambda x,y: cmp(int(x.split(' ')[-1]), int(y.split(' ')[-1])))
lines = sorted(f.readlines(), cmp=comparator)
print lines