Python sorted()函数排序电影列表异常,如何按要求实现排序?
问题分析与修正方案
你的代码存在两个核心问题导致排序未按预期生效,同时还有循环逻辑错误,以下是具体说明和修正:
1. sorted()函数未正确赋值
sorted()函数不会原地修改原列表,它会返回一个全新的排序后列表。你当前仅调用了sorted(dates, ...)但未将结果存回dates,因此原dates列表始终保持初始遍历顺序,排序操作等于白做。
2. 遍历dates的循环逻辑错误
你用for i in range(len(dates))遍历的是整数索引(0、1、2...),后续写i[0]会直接触发"整数无索引"的错误,正确做法是直接遍历dates中的元素。
额外优化:年份处理可简化
你将value.split(',')存入year列表的操作完全冗余,直接拆分后提取第一个部分即可。
修正后的完整代码
def movies_by_release_date(movies): long_ago = [] dates = [] movies_list = [] for title, info in movies.items(): # 拆分信息并去除首尾空格,避免潜在空格干扰 first_part = info.split(',')[0].strip() if first_part == 'a long time ago': long_ago.append(title) else: release_year = int(first_part) dates.append([title, release_year]) # 将排序结果赋值给dates,替换原列表 dates = sorted(dates, key=lambda x: x[1], reverse=True) # 直接遍历dates提取电影标题 for movie_title, _ in dates: movies_list.append(movie_title) # 批量添加"很久以前"的电影 movies_list.extend(long_ago) return movies_list print(movies_by_release_date({ "Dude, Where’s My Death Star": "a long time ago, in a galaxy far far away", "Star Wars: The Force Awakens": "2015, in Los Angeles", "Star Wars": "1977, in Los Angeles", "Sleepless in Aldera": "a long time ago, in Alderaan City", "Jurassic World": "2015, in New York" }))
运行结果
修正后代码会输出符合预期的排序:
['Star Wars: The Force Awakens', 'Jurassic World', 'Star Wars', 'Dude, Where’s My Death Star', 'Sleepless in Aldera']
- 2015年的两部电影排在最前(Python 3.7+字典为有序结构,同年份电影会保留原字典中的顺序)
- 1977年的电影紧随其后
- "a long time ago"的电影全部排在末尾
内容的提问来源于stack exchange,提问作者shari
相关产品推荐
相关产品推荐

