Python - 从最高到最低排序字符串(名称和分数)

时间:2015-12-14 10:27:38

标签: python string list numbers integer

假设我有这个名单和分数列表:

scores_list = ["Username1,9,5,6", "Username2,7,6,8", "Username3,10,10,7"]

列表中的每个值的格式为-Name-Score1-Score2-Score3 -

我如何对此列表进行排序,以便从过去3个结果中得分最高的用户首先一直到最后得分最低。

所以,在这种情况下,我希望它会像这样订购

("Username3,10,10,7", "Username1,9,6,5", "Username2,8,7,6") 

10是最高,然后是9,然后是8。

因此,基本上,我需要将三个分数按从最高到最低的顺序排列,然后列表中每个值的最高分也要从最高到最低排序。

也许我需要为列表中的每个值赋予它自己的索引,所以它是一个2d列表?

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

您首先需要拆分每个条目并以数字方式对分数进行排序。然后可以重新生成结果列表以创建更新的scores_list,如下所示:

scores_list = ["Username1,9,5,6", "Username2,7,6,8", "Username3,10,10,7"]
output = []

for entry in scores_list:
    values = entry.split(',')
    output.append([values[0], sorted([int(x) for x in values[1:]], reverse=True)])

scores_list = ['{},{}'.format(entry[0], ','.join(str(x) for x in entry[1])) for entry in sorted(output, key=lambda x: x[1], reverse=True)]
print scores_list

这将显示以下内容:

['Username3,10,10,7', 'Username1,9,6,5', 'Username2,8,7,6']

答案 1 :(得分:0)

使用排序的sorted or .sort methodkey属性

<强>代码:

scores_list = ["Username1,920,5,6", "Username2,10,11,8", "Username3,10,10,7"]
def transform(lst):
    return map(int, lst.split(",")[1:])
print sorted(scores_list, key= transform ,reverse=True)

<强>输出:

['Username3,10,10,7', 'Username1,9,5,6', 'Username2,7,6,8']

备注:

  • 我们在排序
  • 的键属性上调用tranform函数
  • 在转换函数中,我们在,处滑动并将它们转换为整数列表并将其赋予键

答案 2 :(得分:0)

首先,使用一个函数将每个元素(如Username1,9,5,6)转换为列表,如["Username1",9,5,6]。同时,对三个分数进行排序,每个元素的最终形式如["Username1",9,6,5],然后对传输的数据进行排序。最后,连接已排序列表的列表元素

scores_list = ["Username1,9,5,6", "Username2,7,6,8", "Username3,10,10,7"]
def transfer(x):
    items = x.split(",")
    result = [items[0]] + sorted(map(int,items[1:]), reverse = True)
    return result

transfered = map(transfer,scores_list)
transfered.sort(key=lambda x:x[1], reverse = True)

result = [",".join(map(str,x)) for x in transfered]
print result

>>>output:
['Username3,10,10,7', 'Username1,9,6,5', 'Username2,8,7,6']

答案 3 :(得分:0)

如果你是从文件中读取这个文件,那么使用csv模块解析数据会更好:

from csv import reader
with open("your_file") as f:
      srt = sorted(([row[0]] + sorted(map(int, row[1:]), reverse=1) for row in reader(f)), reverse=1)
      for row in srt:
          print(row)

输出:

['Username3', 10, 10, 7]
['Username2', 8, 7, 6]
['Username1', 9, 6, 5]

如果您计划使用数据,那么将其分开将使生活更轻松。

完成数据后,您可以使用csv.writer

重写为文件
with open("your_file","w") as out:
      wr = csv.writer(out)
      wr.writerows(srt)

哪个会给你:

Username3,10,10,7
Username2,8,7,6
Username1,9,6,5