正如标题所述,我正在尝试订购具有多种数据类型的列表,即“ 123-abc”,“ 20-xyz”等。我尝试使用.sort( )和.sorted()一样:
import csv
x = open("leaderboard.txt","r")
reader = csv.reader(x)
allRows = [row for row in reader]
allRows.sort(reverse = True)
print(allRows)
但是这命令错了。
应按数字降序排列,“ 123-xyz”“ 20-abc”“ 10-xyz”,但是将其排序为“ 20-abc”“ 123-xyz”“ 10-xyz”
感谢您的帮助。
答案 0 :(得分:1)
您看到的是字符串排序。例如,'100'
将在'2'
之前排序(以升的顺序),因为每个字符都按顺序排序。您需要为key
参数提供一个自定义函数,该函数会将字符串的一部分转换为int
:
L = ["123 - xyz", "20 - abc", "10 - xyz"]
res = sorted(L, key=lambda x: int(x.split()[0]), reverse=True)
["123 - xyz", "20 - abc", "10 - xyz"]
答案 1 :(得分:0)
根据您在文本文件“ 123-abc”,“ 20-xyz”中的示例
“字符串”和“整数”值具有不同的十六进制值,因此字符串或字符“ 1”(十六进制-223122a)与整数1(十六进制-31a)不同。您正在按字符串值排序,它们不会将您的数字视为整数,这就是为什么您得到奇怪的输出的原因。
答案 2 :(得分:0)
假设所有字符串都采用如图所示的格式,则可以通过使用sort
索引int
的{{1}}作为密钥来.split(' -')
0