簡體   English   中英

對列表值進行排序(從文件中讀取到列表中)

[英]Sorting on list values read into a list from a file

我試圖編寫一個例程來從文本文件中讀取值(名稱和分數),然后能夠按名稱,從高到低等對值az進行排序。我能夠對數據進行排序,但只能按位置進行排序字符串,名稱不同長度的字符串是不好的。 這是我到目前為止編寫的代碼:

ClassChoice = input("Please choose a class to analyse Class 1 = 1, Class 2 = 2")
if ClassChoice == "1":
    Classfile = open("Class1.txt",'r')
else:
    Classfile = open("Class2.txt",'r')
ClassList = [line.strip() for line in Classfile]
ClassList.sort(key=lambda s: s[x])
print(ClassList)

這是數據文件之一的示例(每條數據都在單獨的行上):

Bob,8,7,5 Fred,10,9,9 Jane,7,8,9 Anne,6,4,8 Maddy,8,5,5 Jim,4,6,5 Mike,3,6,5 Jess ,8,8,6戴夫,4,3,8埃德,3,3,4

我可以對名稱進行排序,但不能對分數1、2或3進行排序。雖然很明顯,但是我找不到能夠以相同方式工作的示例。

謝謝

這樣的事情怎么樣?

indexToSortOn = 0 # will sort on the first integer value of each line
classChoice = ""
while not classChoice.isdigit():
    classChoice = raw_input("Please choose a class to analyse (Class 1 = 1, Class 2 = 2) ")
classFile = "Class%s.txt" % classChoice
with open(classFile, 'r') as fileObj:
    classList = [line.strip() for line in fileObj]
classList.sort(key=lambda s: int(s.split(",")[indexToSortOn+1]))
print(classList)

關鍵是要在關鍵函數中指定要傳遞的每個字符串(行)的哪一部分作為排序依據:

classList.sort(key=lambda s: int(s.split(",")[indexToSortOn+1]))

強制轉換為整數很重要,因為它可以確保排序是數字而不是字母數字(例如100> 2,但“ 100” <“ 2”)

我想我明白您的要求。 我不是排序專家,但是這里有:

假設您希望能夠按名稱,第一個int,第二個int或第三個int對行進行排序,那么您必須意識到,創建列表時,您並不是在創建二維列表,而是創建一個列表的字符串。 因此,您不妨考慮將lambda更改為以下形式:

ClassList.sort(key=lambda s: str(s).split(',')[x])

假定x被定義為該行中具有可能值0-3的字段之一。

我看到的一個問題是list.sort()可能會將Fred的10得分排序為小於2但大於0(我似乎記得這是對int進行排序的方式,但我可能會誤解)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM