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
相关产品推荐
相关产品推荐

