我写了一个简短的程序,读取一个文本文件,其中包含我喜欢的恐怖电影的名称,发布日期,以及我如何评价它们(每个用冒号分隔)。然后使用str.format()在格式化的输出中打印每个标题,发布日期和我的评级。我想知道的是我如何根据发布日期或评级对输出进行排序。这是我所拥有的东西:
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 :(得分: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)