2016-10-24 101 views
1

我寫了一個簡短的程序,讀取一個文本文件,其中包含我喜歡的恐怖電影的名稱,它們的發佈日期以及我如何對它們進行評分(每個都用冒號分隔)。然後使用str.format()打印每個標題,發佈日期和格式化輸出中的評分。我想知道的是我如何根據發佈日期或評分來排序輸出。這裏有一些我有什麼:Python,排序格式化輸出

with open('filename', 'r') as fh: 
    for each_line in fh: 
     (title, date, rating)=each_line.split(':') 
     print('{0:^40} {1:^10} {2:^7}'.format(title, date, rating) 

我只是想提示如何將排序引入格式化輸出;我似乎無法弄清楚。我對Python很陌生並且自我教導,而這個簡單的問題 - 我確信 - 問題困擾了我。

任何提示將不勝感激。

感謝

+0

我建議你整理格式或打印任何東西 – vaultah

回答

1

,同時通過他們的循環,如果你想排序他們不能打印出來:你顯然需要知道每一個值,才能進行排序。

我建議首先裝載的是整個文件的內容到一個列表:

movies = [each_line.split(':') for each_line in fh] 

然後,您可以通過排序任何你想要的關鍵。作爲排序依據的評價:

sorted_movies = sorted(movies, key=lambda m: int(m[2])) # add reverse=True to sort descending 

請注意,您需要正確地按日期排序,以轉換爲datetime

然後,您可以通過這些來分類的電影和打印循環:

for movie in sorted_movies: 
    (title, date, rating) = movie 
    print('{0:^40} {1:^10} {2:^7}'.format(title, date, rating) 

更爲簡潔:

movies = [line.split(':') for line in fh] 
for title, date, rating in sorted(movies, lambda m: int(m[2])): 
    print('{0:^40} {1:^10} {2:^7}'.format(title, date, rating) 
+0

這看起來很簡單之前列表,但我不得不閱讀lambda使用,還沒有涉及。 – writerman74

+0

「sorted」的第二個參數只是一個返回要排序的值的函數。在這種情況下,該函數將索引2(= rating)的「int」值拉出並基於該值進行排序。 – brianpck

+0

這裏是'int'嗎? – writerman74