从文本文件中订购具有多种数据类型的列表

时间:2018-10-14 23:50:36

标签: python list sorting text-files

正如标题所述,我正在尝试订购具有多种数据类型的列表,即“ 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”

感谢您的帮助。

3 个答案:

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