Python 从文本文件中排序具有多种数据类型的列表

Python 从文本文件中排序具有多种数据类型的列表,python,list,sorting,text-files,Python,List,Sorting,Text Files,正如标题所说,我正在尝试对具有多种数据类型的列表进行排序,即“123-abc”、“20-xyz”等。。我尝试过使用.sort()和.sorted()按常规方式对其进行排序,如下所示: 但是这个命令是错误的 它应该按照数字降序排列,“123-xyz”“20-abc”“10-xyz”,但它的顺序是“20-abc”“123-xyz”“10-xyz” 非常感谢您的帮助 基于文本文件“123-abc”、“20-xyz”中的示例 “字符串”和“整型”值具有不同的十六进制值,因此字符串或字符“1”(十六进制-

正如标题所说,我正在尝试对具有多种数据类型的列表进行排序,即“123-abc”、“20-xyz”等。。我尝试过使用.sort()和.sorted()按常规方式对其进行排序,如下所示:

但是这个命令是错误的

它应该按照数字降序排列,“123-xyz”“20-abc”“10-xyz”,但它的顺序是“20-abc”“123-xyz”“10-xyz”

非常感谢您的帮助

基于文本文件“123-abc”、“20-xyz”中的示例


“字符串”和“整型”值具有不同的十六进制值,因此字符串或字符“1”(十六进制-223122a)不同于整型1(十六进制-31a)。您是按字符串值排序的,它们不会将您的数字视为整数,这就是您得到奇怪输出的原因

您看到的是字符串排序。例如,
'100'
将在
'2'
之前排序(升序),因为每个字符都是按顺序排序的。您需要提供一个带有自定义函数的
参数,该函数将字符串的一部分转换为
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"]

假设所有字符串都保持如图所示的格式,您可以使用
.split('-')
索引
0
int
作为键进行排序

lst = [["20 - abc"], ["123 - xyz"], ["10 - xyz"]]
print(sorted(lst, key=lambda x: int(x[0].split(' -')[0]), reverse=True))
# ['123 - xyz', '20 - abc', '10 - xyz']

这就解释了为什么会搞砸了,谢谢。有没有一种方法可以继续对它们进行排序,或者我必须完全更改代码?这不起作用,结果是:AttributeError:“list”对象没有属性“split”还有其他方法吗?@Dave works确保列表格式正确,尝试复制并通过整个代码。列表的格式始终相同,除非您指的是实际的列表本身,在这种情况下,我将如何设置其格式?@Dave否我的意思是您的列表的设置与此相同?用逗号分隔的字符串?然后,您完全按照原样使用
排序
表达式?它位于如上所示的文本文件中,当检索其格式为['52-asd']、['43-xyz']、['24-abc']、['20-xyz']、['2-abc']、['123-asd']、['10-abc']]时,与Vash的答案类似,它会出现一个AttributeError。
lst = [["20 - abc"], ["123 - xyz"], ["10 - xyz"]]
print(sorted(lst, key=lambda x: int(x[0].split(' -')[0]), reverse=True))
# ['123 - xyz', '20 - abc', '10 - xyz']