vacation_poll = {}
name_prompt = "\nWhat is your name? "
vacation_spot_prompt = "\nWhere would you like to go on vacation? "
repeat_prompt = "\nWould you like to continue? (yes/no) "
active = True
while active:
name = input(name_prompt)
vacation_spot = input(vacation_spot_prompt)
vacation_poll[name] = [vacation_spot]
repeat = input(repeat_prompt)
if repeat == 'no':
active = False
for name, spots in vacation_poll.items():
print("\nThese are " + name.title() + "'s places of interest: ")
for spot in spots:
print("\t" + spot.title())
print(vacation_poll)
我的目标是在显示相同键时在字典Vacation_poll内的列表中添加一个新的休假点。因此,如果在继续循环后Joe再次出现,则应将新的休假点添加到Joe的休假点列表中,但我会将其覆盖。我尝试使用for循环进行追加,但这也不起作用。每次循环继续时,如何解决将其添加到列表中的新值?
答案 0 :(得分:2)
您是否考虑过要用于字典的架构?从您的代码看来,您正在尝试做类似的事情
vacation_poll = {
'Bob': ['Fiji', 'Florida', 'Japan'],
'Joe': ['Disney Land', 'Six Flags', 'Lego Land']
}
当我遇到这类问题时,通常我要做的是设置一个if语句,以检查字典中是否还不存在该键,如果不存在,则用一个列表初始化它:
if name not in vacation_poll:
vacation_poll[name] = []
这让我不必担心列表稍后在我的代码中是否不存在,我可以做类似的事情
vacation_poll[name].append(vacation_spot)
由于将与name
关联的值初始化为列表之后,我可以指望那里的列表了。
在您的情况下,您可能考虑使用集合而不是列表,因为它仅强制存储唯一值。这样,如果用户两次输入相同的值,即使第二次再次插入它也只会记录一次。
答案 1 :(得分:2)
您需要使用一种附加到列表的形式。但是,您不能只使用以下之一:
vacation_poll[name]+=[vacation_spot]
vacation_poll[name].append(vacation_spot)
这样做会引发错误,因为当添加一个人的第一个假期时,字典中的人名将没有索引值。相反,需要使用get(index, default)
方法。
vacation_poll[name]=vacation_poll.get(name, [])+[vacation_spot]
这将是所需的。当键尚未在字典中时,get()
将返回第二个参数,默认值,在这种情况下为空列表。