我试图用enumerate()函数将列表映射到字典中,但当我试图将新值附加到键时,值对与附加它给出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)
如果有人知道如何处理,请告诉我。
append
方法是为列表定义的,但是您从未在代码中创建列表。schedule[movie]
的值被设置为day
,这是一个整数。之后就不能对该值追加了!
我怀疑您希望schedule
始终具有列表值。在这种情况下,您需要使用包含第一天的列表进行初始赋值,而不是直接使用日期值:
if movie not in schedule:
schedule[movie] = [day] # add brackets to make a list
else:
schedule[movie].append(day) # now this will work
正如@ blackknight已经解释过的,您正在尝试追加到一个没有追加方法的整数。对于您正在尝试执行的任务,标准库在collections
模块中提供了默认字典。
from collections import defaultdict
schedule = defaultdict(list)
for day, movie in enumerate(movies):
schedule[movie].append(day)
print(schedule)
如果您想了解更多关于默认字典的信息,我建议您阅读https://realpython.com/python-defaultdict/.