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

Python使用enumerate生成电影排期字典时触发TypeError求解

电影放映日程字典生成报错修复

任务说明

给定影院电影放映列表,索引从0开始计数,数组中第i个元素对应第i天上映的电影名称。需要转换数据生成名为schedule的字典:以电影名称为键,对应值为该电影所有放映日期组成的列表,示例如下:

movies = ['Shrek', 'Snow White', 'Cars', 'Cars', 'Shrek', 'Shrek 2']

# 预期输出
schedule = {
    'Cars': [2, 3],
    'Shrek': [0, 4],
    'Shrek 2': [5],
    'Snow White': [1]
}

注意需要处理电影名首次出现(尚未存在于字典中)的场景。

错误原因分析

提供的代码运行时触发TypeError,核心问题有两点:

  • dict.update()方法要求传入键值对结构参数(字典、或由长度为2的可迭代对象组成的可迭代对象),代码中传入的{movie, day}是集合而非字典,集合无键值映射关系,无法作为update的合法入参。
  • 逻辑缺失:即便修正update的参数格式,现有写法也会直接覆盖电影对应的旧值,无法实现「收集同一电影所有放映日期到列表」的需求。

原有错误代码片段:

# DO NOT change/shuffle the list
movies = ['Ice Age', 'Taxi', 'Taxi 2', 'The Star Wars', 'Taxi 2', 'Zootopia', 
'Zootopia', 'Taxi 2', 'Ice Age', 'Toys Story', 'Ice Age']
schedule = dict()

for day, movie in enumerate(movies):
  schedule.update({movie, day})
print(schedule) 

正确实现代码

遍历过程中先判断电影名是否已存在于字典:如果是首次出现,就初始化对应值为列表,再将当前日期追加到列表中;如果已存在,直接追加日期即可。

# DO NOT change/shuffle the list
movies = ['Ice Age', 'Taxi', 'Taxi 2', 'The Star Wars', 'Taxi 2', 'Zootopia', 
'Zootopia', 'Taxi 2', 'Ice Age', 'Toys Story', 'Ice Age']
schedule = dict()

for day, movie in enumerate(movies):
    # 电影首次出现时初始化对应列表
    if movie not in schedule:
        schedule[movie] = []
    # 追加当前放映日期
    schedule[movie].append(day)

print(schedule)

运行后输出结果符合要求:

{
    'Ice Age': [0, 8, 10],
    'Taxi': [1],
    'Taxi 2': [2, 4, 7],
    'The Star Wars': [3],
    'Zootopia': [5, 6],
    'Toys Story': [9]
}

内容的提问来源于stack exchange,提问作者Nick Tsougy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:39:21