Python中的字母顺序通过字符串排序列表?

时间:2015-11-20 12:13:46

标签: python sorting

我有一个程序可以将这个人的姓名和得分保存在.txt文件中,如下所示:

Dave      : 5/10
Steven    : 3/10
Jo        : 10/10

所以它基本上会在你名字的末尾添加空格,使其长度恰好为10个字符,所以所有分数都排成一行。

我有另一个程序,按姓名的字母顺序对这些分数进行排序,只需使用sort()

有没有办法可以按分数对它们进行排序?换句话说,使用sort()函数但忽略前12个字符/仅使用第13个字符?

我不想完全剥离名称,因为我希望在列表打印时显示名称(按分数顺序)。

我唯一的想法是拥有一个首先得到分数的列表,然后对其进行排序,然后使用split来交换名称和得分,所以在最终列表中它看起来就像上面的例子。这种方法似乎很愚蠢,但它可能不会起作用。

谢谢!

2 个答案:

答案 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