You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:55:30