Python,排序格式化输出

时间:2016-10-24 18:01:48

标签: python sorting

我写了一个简短的程序,读取一个文本文件,其中包含我喜欢的恐怖电影的名称,发布日期,以及我如何评价它们(每个用冒号分隔)。然后使用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新手并自学,这很简单 - 我确定 - 问题困扰了我。

任何提示都将不胜感激。

由于

1 个答案:

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