我已经积累了一份分数列表,其中列出了达到该特定分数的人的用户名。
然后我使用下面的代码按降序排列分数。
winnerScore.sort()
winnerScore.reverse()
以下是打印列表“ winnerScore”时的结果。
['j 78', 'j 36', 'i 90', 'i 58']
该功能已根据用户名而不是实际代码对它们进行排序。
负责对列表进行排序的功能如下:
global winnerScore
with open("diceRoll.txt","r") as x_file:
contents = x_file.readlines()
oneScore = contents[count-1]
oneScore = oneScore.split(" ")
print(oneScore)
n = oneScore[-2][-1] + " " + oneScore[-1]
winnerScore.append(n)
if len(oneScore) != 0:
winnerScore.sort()
winnerScore.reverse()
我已经从文本文件中读取了分数和用户名。
我该如何更改以确保根据用户名的实际得分对列表“ winnerScore”进行排序?
答案 0 :(得分:1)
要按数字排序,您需要提取数字并将其用作int
,并将其用作排序键。像这样:
winnerScore = sorted(winnerScore, reverse=True, key=lambda x: int(x.split()[1]))
上面的表达式将产生您期望的值:
winnerScore
=> ['i 90', 'j 78', 'i 58', 'j 36']
答案 1 :(得分:1)
默认情况下,字符串的排序顺序为字母顺序。
要自定义排序,您可以添加key-function。
这是一个可行的示例:
>>> def extract_number(score):
"Convert the string 'j 78' to the number 78"
level, value = score.split()
return int(value)
>>> scores = ['j 78', 'j 36', 'i 90', 'i 58']
>>> scores.sort(key=extract_number)
>>> scores
['j 36', 'i 58', 'j 78', 'i 90']
希望这会有所帮助:-)
答案 2 :(得分:1)
您可以尝试类似的操作,根据得分对输入元素进行排序
x.sort(key= lambda i:i.split(' ')[-1], reverse=True)
其中x是包含输入的列表,名称和分数由空格('')
分隔希望它对xx有帮助
答案 3 :(得分:0)
您可以在自定义sort
函数中使用正则表达式,如果您的字符串中有多个空格,这可能会有所帮助:
import re
scores = ['j 78', 'j 36', 'i 90', 'i 58']
def get_score(username_score):
score = re.search(r'\d+', username_score).group()
return int(score)
scores.sort(key=get_score)
输出:
['j 36', 'i 58', 'j 78', 'i 90']