我有一个程序可以将这个人的姓名和得分保存在.txt文件中,如下所示:
Dave : 5/10
Steven : 3/10
Jo : 10/10
所以它基本上会在你名字的末尾添加空格,使其长度恰好为10个字符,所以所有分数都排成一行。
我有另一个程序,按姓名的字母顺序对这些分数进行排序,只需使用sort()
有没有办法可以按分数对它们进行排序?换句话说,使用sort()函数但忽略前12个字符/仅使用第13个字符?
我不想完全剥离名称,因为我希望在列表打印时显示名称(按分数顺序)。
我唯一的想法是拥有一个首先得到分数的列表,然后对其进行排序,然后使用split来交换名称和得分,所以在最终列表中它看起来就像上面的例子。这种方法似乎很愚蠢,但它可能不会起作用。
谢谢!
答案 0 :(得分:2)
我唯一的想法是拥有一个首先得到分数的列表,然后对其进行排序,然后使用split来交换名称和得分,所以在最终列表中它看起来就像上面的例子。这种方法似乎很愚蠢,但它可能不会起作用。
the documentation中的第8点:
L.sort(key=lambda x: int(x.split()[2].split('/')[0]))
答案 1 :(得分:0)
将您的数据表示为这样的元组列表:
>>> l = [ ("Dave", 5), ("Steven", 3), ("Jo", 10) ]
你可以这样做:
>>> l = map(lambda x: (x[0],int(x[1])), re.findall("(\w+)[ \t]*:[ \t]*(\d+)\/\d+",txt))
('Dave', 5), ('Steven', 3), ('Jo', 10)]
按名称排序使用:
>>> l.sort()
并按分数排序:
>>> l.sort(key = lambda x: x[1])
要打印,请使用:
for name, score in l:
print name,"\t:",score,".",10