Python字典追加值报错AttributeError: 'int'对象无append属性
报错原因
enumerate()遍历列表时,首次遇到某个电影名时,你给字典对应键赋的值是整数类型的天数day,不是列表。当后续再次遇到同一个电影名进入else分支时,schedule[movie]取到的是之前存的整数,整数类型本身没有append()方法,因此触发AttributeError。
修复方案
核心调整是:首次给电影名存值时,就把值初始化为列表类型,将第一个上映天数作为列表的首个元素存入,后续遇到同个电影直接往列表追加天数即可。
修正后的可运行代码:
movies = ['star wars', 'avenger', 'iron man', 'spider man', 'star wars', 'spider man', 'iron man', 'star wars', 'star wars'] schedule = {} for day, movie in enumerate(movies): if movie not in schedule: # 首次存储时初始化为列表,放入当前天数 schedule[movie] = [day] else: schedule[movie].append(day) print(schedule)
运行后输出结果为:
{'star wars': [0, 4, 7, 8], 'avenger': [1], 'iron man': [2, 6], 'spider man': [3, 5]}
简化写法(可选)
如果不想手动判断键是否存在,可以使用collections模块的defaultdict,它会在访问不存在的键时自动生成指定类型的默认值,代码更简洁:
from collections import defaultdict movies = ['star wars', 'avenger', 'iron man', 'spider man', 'star wars', 'spider man', 'iron man', 'star wars', 'star wars'] # 指定默认值类型为列表 schedule = defaultdict(list) for day, movie in enumerate(movies): schedule[movie].append(day) # 转成普通字典输出即可 print(dict(schedule))
内容的提问来源于stack exchange,提问作者Krushna Navle
相关产品推荐
相关产品推荐

